[{"data":1,"prerenderedAt":4},["ShallowReactive",2],{"code:bash:1tkdxf3":3},"\u003Cpre class=\"shiki ipscope\" style=\"background-color:var(--shiki-background);color:var(--shiki-foreground)\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-comment)\">#!\u002Fusr\u002Fbin\u002Fenv bash\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-function)\">set\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> -euo\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> pipefail\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">DEST\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">=\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\">\"\u002Fvar\u002Flib\u002Fipscope\u002Fipscope-complete.mmdb\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">TMP\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">=\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\">\"$(\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-function)\">mktemp\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> \u002Fvar\u002Flib\u002Fipscope\u002F.ipscope.mmdb.XXXXXX\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\">)\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-comment)\"># 1. Download latest release (supports ETag &#x26; HTTP Range)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-function)\">curl\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> -fsSL\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> -H\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"Authorization: Bearer ${IPSCOPE_DOWNLOAD_KEY}\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-foreground)\"> \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">  \"https:\u002F\u002Fapi.ipscope.io\u002Fv1\u002Fmmdb\u002Freleases\u002Flatest\u002Fdownload?format=mmdb\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> -o\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"$TMP\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-comment)\"># 2. Verify SHA-256 digest before atomic mv\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-foreground)\">EXPECTED\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">=\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\">\"$(\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-function)\">curl\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> -fsSL\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> -H\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"Authorization: Bearer ${IPSCOPE_DOWNLOAD_KEY}\" \\\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-string-expression)\">  \"https:\u002F\u002Fapi.ipscope.io\u002Fv1\u002Fmmdb\u002Freleases\u002Flatest\u002Fchecksums?format=text\" \u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\">|\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-function)\"> awk\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> '\u002F\\.mmdb$\u002F {print $1}')\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-function)\">echo\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"${EXPECTED}  ${TMP}\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-keyword)\"> |\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-function)\"> sha256sum\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> -c\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> -\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-comment)\"># 3. Atomic POSIX rename (existing mmap readers stay valid)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:var(--shiki-token-function)\">mv\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string)\"> -f\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"$TMP\"\u003C\u002Fspan>\u003Cspan style=\"color:var(--shiki-token-string-expression)\"> \"$DEST\"\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",1793226490990]