[{"data":1,"prerenderedAt":2291},["ShallowReactive",2],{"posts-en":3,"cfn":1346},[4,1120],{"id":5,"title":6,"body":7,"date":1112,"desc":1113,"description":13,"edit":1112,"extension":1114,"meta":1115,"navigation":423,"path":1116,"seo":1117,"stem":1118,"__hash__":1119},"blog\u002Fblog\u002Fen\u002Fcf-network.md","How to Display the Current Cloudflare Network Used on a Website",{"type":8,"value":9,"toc":1108},"minimark",[10,14,21,27,32,40,146,157,160,163,170,175,178,193,377,380,384,394,397,1104],[11,12,13],"p",{},"Early this morning, I added a small feature to my personal website: displaying the current Cloudflare network in use.",[11,15,16],{},[17,18],"img",{"alt":19,"src":20},"","https:\u002F\u002Fr2.kuriyona.com\u002Fstatic\u002F2026\u002F05\u002F24\u002Fcf-network-preview.png",[22,23,24],"blockquote",{},[11,25,26],{},"Scroll to the bottom of this website, and you should see the actual display style.",[28,29,31],"h3",{"id":30},"implementation-approach","Implementation Approach",[11,33,34,35,39],{},"For websites proxied by Cloudflare, visiting ",[36,37,38],"code",{},"{domain}\u002Fcdn-cgi\u002Ftrace"," returns information about the Cloudflare network currently being used. Example output:",[41,42,46],"pre",{"className":43,"code":44,"language":45,"meta":19,"style":19},"language-plaintext shiki shiki-themes github-dark","fl=582f239\nh=kuriyona.com\nip=64.90.0.218\nts=1779555940.000\nvisit_scheme=https\nuag=Mozilla\u002F5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\u002F537.36 (KHTML, like Gecko) Chrome\u002F149.0.0.0 Safari\u002F537.36 Edg\u002F149.0.0.0\ncolo=HKG\nsliver=none\nhttp=http\u002F3\nloc=HK\ntls=TLSv1.3\nsni=plaintext\nwarp=off\ngateway=off\nrbi=off\nkex=X25519MLKEM768\n","plaintext",[36,47,48,56,62,68,74,80,86,92,98,104,110,116,122,128,134,140],{"__ignoreMap":19},[49,50,53],"span",{"class":51,"line":52},"line",1,[49,54,55],{},"fl=582f239\n",[49,57,59],{"class":51,"line":58},2,[49,60,61],{},"h=kuriyona.com\n",[49,63,65],{"class":51,"line":64},3,[49,66,67],{},"ip=64.90.0.218\n",[49,69,71],{"class":51,"line":70},4,[49,72,73],{},"ts=1779555940.000\n",[49,75,77],{"class":51,"line":76},5,[49,78,79],{},"visit_scheme=https\n",[49,81,83],{"class":51,"line":82},6,[49,84,85],{},"uag=Mozilla\u002F5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\u002F537.36 (KHTML, like Gecko) Chrome\u002F149.0.0.0 Safari\u002F537.36 Edg\u002F149.0.0.0\n",[49,87,89],{"class":51,"line":88},7,[49,90,91],{},"colo=HKG\n",[49,93,95],{"class":51,"line":94},8,[49,96,97],{},"sliver=none\n",[49,99,101],{"class":51,"line":100},9,[49,102,103],{},"http=http\u002F3\n",[49,105,107],{"class":51,"line":106},10,[49,108,109],{},"loc=HK\n",[49,111,113],{"class":51,"line":112},11,[49,114,115],{},"tls=TLSv1.3\n",[49,117,119],{"class":51,"line":118},12,[49,120,121],{},"sni=plaintext\n",[49,123,125],{"class":51,"line":124},13,[49,126,127],{},"warp=off\n",[49,129,131],{"class":51,"line":130},14,[49,132,133],{},"gateway=off\n",[49,135,137],{"class":51,"line":136},15,[49,138,139],{},"rbi=off\n",[49,141,143],{"class":51,"line":142},16,[49,144,145],{},"kex=X25519MLKEM768\n",[11,147,148,149,152,153,156],{},"By parsing the ",[36,150,151],{},"colo"," parameter, we can obtain the current Cloudflare network ID — in this example, ",[36,154,155],{},"HKG",".",[11,158,159],{},"Now that we have the network ID, we can display the corresponding Cloudflare network name.",[11,161,162],{},"Cloudflare Status provides a file that lists the current status information of all Cloudflare networks.",[22,164,165],{},[11,166,167],{},[36,168,169],{},"https:\u002F\u002Fwww.cloudflarestatus.com\u002Fapi\u002Fv2\u002Fsummary.json",[11,171,172],{},[17,173],{"alt":19,"src":174},"https:\u002F\u002Fr2.kuriyona.com\u002Fstatic\u002F2026\u002F05\u002F24\u002Fcf-network-status-api.png",[11,176,177],{},"The file content is quite messy, so we need a simple script to extract the formatted information we need.",[11,179,180,181,184,185,188,189,192],{},"First, filter the ",[36,182,183],{},"name"," fields of network components using a simple regular expression (",[36,186,187],{},"^[A-Za-z\\s,]+-\\s*\\(([A-Z]{3})\\)$","), then simplify the data structure. (Here, we use the ",[36,190,191],{},"ky"," library to fetch data.)",[41,194,198],{"className":195,"code":196,"language":197,"meta":19,"style":19},"language-ts shiki shiki-themes github-dark","const res = await ky.get('https:\u002F\u002Fwww.cloudflarestatus.com\u002Fapi\u002Fv2\u002Fsummary.json').json();\nconst result = res.components\n  .filter((c) => REGEX.test(c.name))\n  .map((n) => ({\n    name: n.name,\n    code: n.name.match(\u002F^[A-Za-z\\s,]+-\\s*\\(([A-Z]{3})\\)$\u002F)?.[1],\n  }));\n","ts",[36,199,200,240,252,284,303,308,372],{"__ignoreMap":19},[49,201,202,206,210,213,216,220,224,227,231,234,237],{"class":51,"line":52},[49,203,205],{"class":204},"snl16","const",[49,207,209],{"class":208},"sDLfK"," res",[49,211,212],{"class":204}," =",[49,214,215],{"class":204}," await",[49,217,219],{"class":218},"s95oV"," ky.",[49,221,223],{"class":222},"svObZ","get",[49,225,226],{"class":218},"(",[49,228,230],{"class":229},"sU2Wk","'https:\u002F\u002Fwww.cloudflarestatus.com\u002Fapi\u002Fv2\u002Fsummary.json'",[49,232,233],{"class":218},").",[49,235,236],{"class":222},"json",[49,238,239],{"class":218},"();\n",[49,241,242,244,247,249],{"class":51,"line":58},[49,243,205],{"class":204},[49,245,246],{"class":208}," result",[49,248,212],{"class":204},[49,250,251],{"class":218}," res.components\n",[49,253,254,257,260,263,267,270,273,276,278,281],{"class":51,"line":64},[49,255,256],{"class":218},"  .",[49,258,259],{"class":222},"filter",[49,261,262],{"class":218},"((",[49,264,266],{"class":265},"s9osk","c",[49,268,269],{"class":218},") ",[49,271,272],{"class":204},"=>",[49,274,275],{"class":208}," REGEX",[49,277,156],{"class":218},[49,279,280],{"class":222},"test",[49,282,283],{"class":218},"(c.name))\n",[49,285,286,288,291,293,296,298,300],{"class":51,"line":70},[49,287,256],{"class":218},[49,289,290],{"class":222},"map",[49,292,262],{"class":218},[49,294,295],{"class":265},"n",[49,297,269],{"class":218},[49,299,272],{"class":204},[49,301,302],{"class":218}," ({\n",[49,304,305],{"class":51,"line":76},[49,306,307],{"class":218},"    name: n.name,\n",[49,309,310,313,316,318,321,324,327,330,334,337,340,344,346,349,352,355,358,361,363,366,369],{"class":51,"line":82},[49,311,312],{"class":218},"    code: n.name.",[49,314,315],{"class":222},"match",[49,317,226],{"class":218},[49,319,320],{"class":229},"\u002F",[49,322,323],{"class":204},"^",[49,325,326],{"class":208},"[A-Za-z\\s,]",[49,328,329],{"class":204},"+",[49,331,333],{"class":332},"sns5M","-",[49,335,336],{"class":208},"\\s",[49,338,339],{"class":204},"*",[49,341,343],{"class":342},"sRjNt","\\(",[49,345,226],{"class":332},[49,347,348],{"class":208},"[A-Z]",[49,350,351],{"class":204},"{3}",[49,353,354],{"class":332},")",[49,356,357],{"class":342},"\\)",[49,359,360],{"class":204},"$",[49,362,320],{"class":229},[49,364,365],{"class":218},")?.[",[49,367,368],{"class":208},"1",[49,370,371],{"class":218},"],\n",[49,373,374],{"class":51,"line":88},[49,375,376],{"class":218},"  }));\n",[11,378,379],{},"Combined with the network ID obtained earlier, we can now get the actual network node name.",[28,381,383],{"id":382},"code-implementation","Code Implementation",[11,385,386,387],{},"The actual code used on this site can be seen in ",[388,389,393],"a",{"href":390,"rel":391},"https:\u002F\u002Fgithub.com\u002FKuriyona\u002FKuriyona.com\u002Fblob\u002Fmain\u002Fapp\u002Fcomposables\u002FuseCloudflareStatus.ts",[392],"nofollow","useCloudflareStatus.ts",[11,395,396],{},"Below is a complete TypeScript implementation:",[41,398,400],{"className":195,"code":399,"language":197,"meta":19,"style":19},"import ky from 'ky';\n\nconst REGEX = \u002F^[A-Za-z\\s,]+-\\s*\\(([A-Z]{3})\\)$\u002F;\n\ninterface NodeInfo {\n  name: string;\n  code: string | undefined;\n}\n\ninterface TraceData {\n  colo?: string;\n  loc?: string;\n  [key: string]: string | undefined;\n}\n\ninterface CloudflareStatusResult {\n  nodesData: NodeInfo[] | undefined;\n  traceData: TraceData | undefined;\n  currentNodeName: string | undefined;\n  location: string | undefined;\n}\n\nexport async function getCloudflareStatus(): Promise\u003CCloudflareStatusResult> {\n  \u002F\u002F Fetch node data\n  const nodesResponse = await ky.get('https:\u002F\u002Fwww.cloudflarestatus.com\u002Fapi\u002Fv2\u002Fsummary.json').json();\n  const nodesData = nodesResponse.components\n    .filter((c) => REGEX.test(c.name))\n    .map((n) => ({\n      name: n.name,\n      code: n.name.match(REGEX)?.[1],\n    }));\n\n  \u002F\u002F Fetch trace data\n  const traceText = await ky.get('https:\u002F\u002Fkuriyona.com\u002Fcdn-cgi\u002Ftrace').text();\n  const traceData = Object.fromEntries(\n    traceText\n      .split('\\n')\n      .filter((line) => line.includes('='))\n      .map((line) => line.split('=')),\n  ) as TraceData;\n\n  console.log(traceData);\n\n  \u002F\u002F Determine current node name\n  const currentNodeName = nodesData.find((n) => n.code === traceData?.colo)?.name;\n\n  const location = traceData?.loc;\n\n  return {\n    nodesData,\n    traceData,\n    currentNodeName,\n    location,\n  };\n}\n",[36,401,402,419,425,466,470,481,494,511,516,520,529,541,552,577,581,585,594,614,630,646,662,667,672,704,711,738,751,775,792,798,817,823,828,834,862,881,887,909,938,964,977,982,994,999,1005,1038,1043,1056,1061,1069,1075,1081,1087,1093,1099],{"__ignoreMap":19},[49,403,404,407,410,413,416],{"class":51,"line":52},[49,405,406],{"class":204},"import",[49,408,409],{"class":218}," ky ",[49,411,412],{"class":204},"from",[49,414,415],{"class":229}," 'ky'",[49,417,418],{"class":218},";\n",[49,420,421],{"class":51,"line":58},[49,422,424],{"emptyLinePlaceholder":423},true,"\n",[49,426,427,429,431,433,436,438,440,442,444,446,448,450,452,454,456,458,460,462,464],{"class":51,"line":64},[49,428,205],{"class":204},[49,430,275],{"class":208},[49,432,212],{"class":204},[49,434,435],{"class":229}," \u002F",[49,437,323],{"class":204},[49,439,326],{"class":208},[49,441,329],{"class":204},[49,443,333],{"class":332},[49,445,336],{"class":208},[49,447,339],{"class":204},[49,449,343],{"class":342},[49,451,226],{"class":332},[49,453,348],{"class":208},[49,455,351],{"class":204},[49,457,354],{"class":332},[49,459,357],{"class":342},[49,461,360],{"class":204},[49,463,320],{"class":229},[49,465,418],{"class":218},[49,467,468],{"class":51,"line":70},[49,469,424],{"emptyLinePlaceholder":423},[49,471,472,475,478],{"class":51,"line":76},[49,473,474],{"class":204},"interface",[49,476,477],{"class":222}," NodeInfo",[49,479,480],{"class":218}," {\n",[49,482,483,486,489,492],{"class":51,"line":82},[49,484,485],{"class":265},"  name",[49,487,488],{"class":204},":",[49,490,491],{"class":208}," string",[49,493,418],{"class":218},[49,495,496,499,501,503,506,509],{"class":51,"line":88},[49,497,498],{"class":265},"  code",[49,500,488],{"class":204},[49,502,491],{"class":208},[49,504,505],{"class":204}," |",[49,507,508],{"class":208}," undefined",[49,510,418],{"class":218},[49,512,513],{"class":51,"line":94},[49,514,515],{"class":218},"}\n",[49,517,518],{"class":51,"line":100},[49,519,424],{"emptyLinePlaceholder":423},[49,521,522,524,527],{"class":51,"line":106},[49,523,474],{"class":204},[49,525,526],{"class":222}," TraceData",[49,528,480],{"class":218},[49,530,531,534,537,539],{"class":51,"line":112},[49,532,533],{"class":265},"  colo",[49,535,536],{"class":204},"?:",[49,538,491],{"class":208},[49,540,418],{"class":218},[49,542,543,546,548,550],{"class":51,"line":118},[49,544,545],{"class":265},"  loc",[49,547,536],{"class":204},[49,549,491],{"class":208},[49,551,418],{"class":218},[49,553,554,557,560,562,564,567,569,571,573,575],{"class":51,"line":124},[49,555,556],{"class":218},"  [",[49,558,559],{"class":265},"key",[49,561,488],{"class":204},[49,563,491],{"class":208},[49,565,566],{"class":218},"]",[49,568,488],{"class":204},[49,570,491],{"class":208},[49,572,505],{"class":204},[49,574,508],{"class":208},[49,576,418],{"class":218},[49,578,579],{"class":51,"line":130},[49,580,515],{"class":218},[49,582,583],{"class":51,"line":136},[49,584,424],{"emptyLinePlaceholder":423},[49,586,587,589,592],{"class":51,"line":142},[49,588,474],{"class":204},[49,590,591],{"class":222}," CloudflareStatusResult",[49,593,480],{"class":218},[49,595,597,600,602,604,607,610,612],{"class":51,"line":596},17,[49,598,599],{"class":265},"  nodesData",[49,601,488],{"class":204},[49,603,477],{"class":222},[49,605,606],{"class":218},"[] ",[49,608,609],{"class":204},"|",[49,611,508],{"class":208},[49,613,418],{"class":218},[49,615,617,620,622,624,626,628],{"class":51,"line":616},18,[49,618,619],{"class":265},"  traceData",[49,621,488],{"class":204},[49,623,526],{"class":222},[49,625,505],{"class":204},[49,627,508],{"class":208},[49,629,418],{"class":218},[49,631,633,636,638,640,642,644],{"class":51,"line":632},19,[49,634,635],{"class":265},"  currentNodeName",[49,637,488],{"class":204},[49,639,491],{"class":208},[49,641,505],{"class":204},[49,643,508],{"class":208},[49,645,418],{"class":218},[49,647,649,652,654,656,658,660],{"class":51,"line":648},20,[49,650,651],{"class":265},"  location",[49,653,488],{"class":204},[49,655,491],{"class":208},[49,657,505],{"class":204},[49,659,508],{"class":208},[49,661,418],{"class":218},[49,663,665],{"class":51,"line":664},21,[49,666,515],{"class":218},[49,668,670],{"class":51,"line":669},22,[49,671,424],{"emptyLinePlaceholder":423},[49,673,675,678,681,684,687,690,692,695,698,701],{"class":51,"line":674},23,[49,676,677],{"class":204},"export",[49,679,680],{"class":204}," async",[49,682,683],{"class":204}," function",[49,685,686],{"class":222}," getCloudflareStatus",[49,688,689],{"class":218},"()",[49,691,488],{"class":204},[49,693,694],{"class":222}," Promise",[49,696,697],{"class":218},"\u003C",[49,699,700],{"class":222},"CloudflareStatusResult",[49,702,703],{"class":218},"> {\n",[49,705,707],{"class":51,"line":706},24,[49,708,710],{"class":709},"sAwPA","  \u002F\u002F Fetch node data\n",[49,712,714,717,720,722,724,726,728,730,732,734,736],{"class":51,"line":713},25,[49,715,716],{"class":204},"  const",[49,718,719],{"class":208}," nodesResponse",[49,721,212],{"class":204},[49,723,215],{"class":204},[49,725,219],{"class":218},[49,727,223],{"class":222},[49,729,226],{"class":218},[49,731,230],{"class":229},[49,733,233],{"class":218},[49,735,236],{"class":222},[49,737,239],{"class":218},[49,739,741,743,746,748],{"class":51,"line":740},26,[49,742,716],{"class":204},[49,744,745],{"class":208}," nodesData",[49,747,212],{"class":204},[49,749,750],{"class":218}," nodesResponse.components\n",[49,752,754,757,759,761,763,765,767,769,771,773],{"class":51,"line":753},27,[49,755,756],{"class":218},"    .",[49,758,259],{"class":222},[49,760,262],{"class":218},[49,762,266],{"class":265},[49,764,269],{"class":218},[49,766,272],{"class":204},[49,768,275],{"class":208},[49,770,156],{"class":218},[49,772,280],{"class":222},[49,774,283],{"class":218},[49,776,778,780,782,784,786,788,790],{"class":51,"line":777},28,[49,779,756],{"class":218},[49,781,290],{"class":222},[49,783,262],{"class":218},[49,785,295],{"class":265},[49,787,269],{"class":218},[49,789,272],{"class":204},[49,791,302],{"class":218},[49,793,795],{"class":51,"line":794},29,[49,796,797],{"class":218},"      name: n.name,\n",[49,799,801,804,806,808,811,813,815],{"class":51,"line":800},30,[49,802,803],{"class":218},"      code: n.name.",[49,805,315],{"class":222},[49,807,226],{"class":218},[49,809,810],{"class":208},"REGEX",[49,812,365],{"class":218},[49,814,368],{"class":208},[49,816,371],{"class":218},[49,818,820],{"class":51,"line":819},31,[49,821,822],{"class":218},"    }));\n",[49,824,826],{"class":51,"line":825},32,[49,827,424],{"emptyLinePlaceholder":423},[49,829,831],{"class":51,"line":830},33,[49,832,833],{"class":709},"  \u002F\u002F Fetch trace data\n",[49,835,837,839,842,844,846,848,850,852,855,857,860],{"class":51,"line":836},34,[49,838,716],{"class":204},[49,840,841],{"class":208}," traceText",[49,843,212],{"class":204},[49,845,215],{"class":204},[49,847,219],{"class":218},[49,849,223],{"class":222},[49,851,226],{"class":218},[49,853,854],{"class":229},"'https:\u002F\u002Fkuriyona.com\u002Fcdn-cgi\u002Ftrace'",[49,856,233],{"class":218},[49,858,859],{"class":222},"text",[49,861,239],{"class":218},[49,863,865,867,870,872,875,878],{"class":51,"line":864},35,[49,866,716],{"class":204},[49,868,869],{"class":208}," traceData",[49,871,212],{"class":204},[49,873,874],{"class":218}," Object.",[49,876,877],{"class":222},"fromEntries",[49,879,880],{"class":218},"(\n",[49,882,884],{"class":51,"line":883},36,[49,885,886],{"class":218},"    traceText\n",[49,888,890,893,896,898,901,904,906],{"class":51,"line":889},37,[49,891,892],{"class":218},"      .",[49,894,895],{"class":222},"split",[49,897,226],{"class":218},[49,899,900],{"class":229},"'",[49,902,903],{"class":208},"\\n",[49,905,900],{"class":229},[49,907,908],{"class":218},")\n",[49,910,912,914,916,918,920,922,924,927,930,932,935],{"class":51,"line":911},38,[49,913,892],{"class":218},[49,915,259],{"class":222},[49,917,262],{"class":218},[49,919,51],{"class":265},[49,921,269],{"class":218},[49,923,272],{"class":204},[49,925,926],{"class":218}," line.",[49,928,929],{"class":222},"includes",[49,931,226],{"class":218},[49,933,934],{"class":229},"'='",[49,936,937],{"class":218},"))\n",[49,939,941,943,945,947,949,951,953,955,957,959,961],{"class":51,"line":940},39,[49,942,892],{"class":218},[49,944,290],{"class":222},[49,946,262],{"class":218},[49,948,51],{"class":265},[49,950,269],{"class":218},[49,952,272],{"class":204},[49,954,926],{"class":218},[49,956,895],{"class":222},[49,958,226],{"class":218},[49,960,934],{"class":229},[49,962,963],{"class":218},")),\n",[49,965,967,970,973,975],{"class":51,"line":966},40,[49,968,969],{"class":218},"  ) ",[49,971,972],{"class":204},"as",[49,974,526],{"class":222},[49,976,418],{"class":218},[49,978,980],{"class":51,"line":979},41,[49,981,424],{"emptyLinePlaceholder":423},[49,983,985,988,991],{"class":51,"line":984},42,[49,986,987],{"class":218},"  console.",[49,989,990],{"class":222},"log",[49,992,993],{"class":218},"(traceData);\n",[49,995,997],{"class":51,"line":996},43,[49,998,424],{"emptyLinePlaceholder":423},[49,1000,1002],{"class":51,"line":1001},44,[49,1003,1004],{"class":709},"  \u002F\u002F Determine current node name\n",[49,1006,1008,1010,1013,1015,1018,1021,1023,1025,1027,1029,1032,1035],{"class":51,"line":1007},45,[49,1009,716],{"class":204},[49,1011,1012],{"class":208}," currentNodeName",[49,1014,212],{"class":204},[49,1016,1017],{"class":218}," nodesData.",[49,1019,1020],{"class":222},"find",[49,1022,262],{"class":218},[49,1024,295],{"class":265},[49,1026,269],{"class":218},[49,1028,272],{"class":204},[49,1030,1031],{"class":218}," n.code ",[49,1033,1034],{"class":204},"===",[49,1036,1037],{"class":218}," traceData?.colo)?.name;\n",[49,1039,1041],{"class":51,"line":1040},46,[49,1042,424],{"emptyLinePlaceholder":423},[49,1044,1046,1048,1051,1053],{"class":51,"line":1045},47,[49,1047,716],{"class":204},[49,1049,1050],{"class":208}," location",[49,1052,212],{"class":204},[49,1054,1055],{"class":218}," traceData?.loc;\n",[49,1057,1059],{"class":51,"line":1058},48,[49,1060,424],{"emptyLinePlaceholder":423},[49,1062,1064,1067],{"class":51,"line":1063},49,[49,1065,1066],{"class":204},"  return",[49,1068,480],{"class":218},[49,1070,1072],{"class":51,"line":1071},50,[49,1073,1074],{"class":218},"    nodesData,\n",[49,1076,1078],{"class":51,"line":1077},51,[49,1079,1080],{"class":218},"    traceData,\n",[49,1082,1084],{"class":51,"line":1083},52,[49,1085,1086],{"class":218},"    currentNodeName,\n",[49,1088,1090],{"class":51,"line":1089},53,[49,1091,1092],{"class":218},"    location,\n",[49,1094,1096],{"class":51,"line":1095},54,[49,1097,1098],{"class":218},"  };\n",[49,1100,1102],{"class":51,"line":1101},55,[49,1103,515],{"class":218},[1105,1106,1107],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .s9osk, html code.shiki .s9osk{--shiki-default:#FFAB70}html pre.shiki code .sns5M, html code.shiki .sns5M{--shiki-default:#DBEDFF}html pre.shiki code .sRjNt, html code.shiki .sRjNt{--shiki-default:#85E89D;--shiki-default-font-weight:bold}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}",{"title":19,"searchDepth":58,"depth":58,"links":1109},[1110,1111],{"id":30,"depth":64,"text":31},{"id":382,"depth":64,"text":383},"2026-05-24","By parsing Cloudflare's \u002Fcdn-cgi\u002Ftrace endpoint to obtain the current network node ID, and then matching the node name using Cloudflare Status's public API, you can dynamically display the name of the Cloudflare network that the visitor is using on your website.","md",{},"\u002Fblog\u002Fen\u002Fcf-network",{"title":6,"description":13},"blog\u002Fen\u002Fcf-network","LQ3eL7y80lms45shaXKZReya8ao1y2G7spOGbH6l6WA",{"id":1121,"title":1122,"body":1123,"date":1339,"desc":1340,"description":19,"edit":1339,"extension":1114,"meta":1341,"navigation":423,"path":1342,"seo":1343,"stem":1344,"__hash__":1345},"blog\u002Fblog\u002Fen\u002Fabout-name.md","About the Name of Weixi-chan",{"type":8,"value":1124,"toc":1333},[1125,1129,1137,1144,1148,1151,1162,1168,1217,1221,1224,1235,1240,1247,1254,1263,1266,1281,1291,1295,1301,1304,1309],[28,1126,1128],{"id":1127},"my-names","My Names",[11,1130,1131,1132,1136],{},"I go by ",[1133,1134,1135],"strong",{},"\"Kuriyona\""," – a nickname I chose for myself.",[11,1138,1139,1140,1143],{},"I am also called ",[1133,1141,1142],{},"\"Weixi\" (未晞)"," – the real name I gave myself after I confirmed my gender identity.",[28,1145,1147],{"id":1146},"about-kuriyona","About \"Kuriyona\"",[11,1149,1150],{},"It was born from the sounds of Japanese and the meanings of Chinese characters (kanji).",[11,1152,1153,1154,1158,1159,156],{},"\"Kuriyona\" is pronounced ",[1155,1156,1157],"em",{},"ku-ri-yo-na"," ",[36,1160,1161],{},"クリヨナ",[11,1163,1164,1165,156],{},"The name can be written with the kanji ",[1133,1166,1167],{},"「栗夜奈」",[1169,1170,1171,1184,1199],"ul",{},[1172,1173,1174,1158,1177,1158,1180,1183],"li",{},[1133,1175,1176],{},"「栗」",[1155,1178,1179],{},"kuri",[36,1181,1182],{},"クリ"," – This character symbolizes the nickname I used in the past and the moniker others have always called me by. It also shares the same pronunciation as my real-life family name.",[1172,1185,1186,1158,1189,1158,1192,1195,1196,156],{},[1133,1187,1188],{},"「夜」",[1155,1190,1191],{},"yo",[36,1193,1194],{},"ヨ"," – The meaning I wanted to add: ",[1133,1197,1198],{},"night",[1172,1200,1201,1158,1204,1158,1207,1210,1211,1214,1215,156],{},[1133,1202,1203],{},"「奈」",[1155,1205,1206],{},"na",[36,1208,1209],{},"ナ"," – A soft, lingering syllable, like a gentle particle. It replaces the masculine-sounding ",[1155,1212,1213],{},"ta"," in my old name with the feminine ",[1155,1216,1206],{},[28,1218,1220],{"id":1219},"about-weixi-未晞","About \"Weixi\" (未晞)",[11,1222,1223],{},"And \"Weixi\" (未晞) is the real name I gave myself.",[11,1225,1226,1227,1230,1231,1234],{},"It comes from a line in the ",[1155,1228,1229],{},"Classic of Poetry"," (",[1155,1232,1233],{},"Shijing","), in the section \"Qin Wind\" (秦风):",[22,1236,1237],{},[11,1238,1239],{},"「蒹葭萋萋，白露未晞」",[22,1241,1242],{},[11,1243,1244],{},[1155,1245,1246],{},"Jiān jiā qī qī, bái lù wèi xī",[22,1248,1249],{},[11,1250,1251],{},[1155,1252,1253],{},"\"Thick grows the reed; \u002F The white dew is not yet dried.\"",[11,1255,1256,1258,1259,1262],{},[1133,1257,1142],{}," means the morning dew ",[1133,1260,1261],{},"not yet dried by the sun"," – that moment just before dawn, when the air is still moist and everything is waking up, yet nothing is quite finished.",[11,1264,1265],{},"It carries the sense of:",[1169,1267,1268,1275],{},[1172,1269,1270,1271,1274],{},"the ",[1133,1272,1273],{},"last trace of dampness"," before sunrise,",[1172,1276,1270,1277,1280],{},[1133,1278,1279],{},"quietest light"," at the very beginning of new life.",[11,1282,1283,1284,1287,1288,1290],{},"After I came to fully recognize my gender identity,",[1285,1286],"br",{},"\nI chose these two characters",[1285,1289],{},"\nas a confirmation of my own authentic existence.",[28,1292,1294],{"id":1293},"a-short-note","A Short Note",[11,1296,1297,1298,1300],{},"\"Kuriyona\" was the small night where I once hid myself.",[1285,1299],{},"\n\"Weixi\" is the daybreak I finally welcomed.",[1302,1303],"hr",{},[11,1305,1306],{},[1155,1307,1308],{},"Note for English readers:",[1169,1310,1311,1317,1330],{},[1172,1312,1313,1314,1316],{},"The name ",[1133,1315,1135],{}," uses Japanese phonetics but carries layered meanings from kanji.",[1172,1318,1319,1321,1322,1325,1326,1329],{},[1133,1320,1142],{}," is a classical Chinese name. The character ",[1133,1323,1324],{},"\"晞\" (xī)"," specifically means \"to be dried by the sun\" – so ",[1155,1327,1328],{},"wèi xī"," literally means \"not yet dried,\" evoking the fresh, tender moment of early dawn.",[1172,1331,1332],{},"The original poem \"Jian Jia\" (蒹葭) is a famous piece about longing and elusive beauty; the line \"white dew not yet dried\" suggests a fleeting, precious moment just before it vanishes.",{"title":19,"searchDepth":58,"depth":58,"links":1334},[1335,1336,1337,1338],{"id":1127,"depth":64,"text":1128},{"id":1146,"depth":64,"text":1147},{"id":1219,"depth":64,"text":1220},{"id":1293,"depth":64,"text":1294},"2026-05-18","The origin of the name \"Weixi-chan\"",{},"\u002Fblog\u002Fen\u002Fabout-name",{"title":1122,"description":19},"blog\u002Fen\u002Fabout-name","nbnqlDr49eqFXQ5D43vViIxsWId5Z7j146sg2Vk6RPE",[1347,1350,1353,1356,1359,1362,1365,1368,1371,1374,1377,1380,1383,1386,1389,1392,1395,1398,1401,1404,1407,1410,1413,1416,1419,1422,1425,1428,1431,1434,1437,1440,1443,1446,1449,1452,1455,1458,1461,1464,1467,1470,1473,1476,1479,1482,1485,1488,1491,1494,1497,1500,1503,1506,1509,1512,1515,1518,1521,1524,1527,1530,1533,1536,1539,1542,1545,1548,1551,1554,1557,1560,1563,1566,1569,1572,1575,1578,1581,1584,1587,1590,1593,1596,1599,1602,1605,1608,1611,1614,1617,1620,1623,1626,1629,1632,1635,1638,1641,1644,1647,1650,1653,1656,1659,1662,1665,1668,1671,1674,1677,1680,1683,1686,1689,1692,1695,1698,1701,1704,1707,1710,1713,1716,1719,1722,1725,1728,1731,1734,1737,1740,1743,1746,1749,1752,1755,1758,1761,1763,1766,1769,1772,1775,1778,1781,1784,1787,1790,1793,1796,1799,1802,1805,1808,1811,1814,1817,1820,1823,1826,1829,1832,1835,1838,1841,1844,1847,1850,1853,1856,1859,1862,1865,1868,1871,1874,1877,1880,1883,1886,1889,1892,1895,1898,1901,1904,1907,1910,1913,1916,1919,1922,1925,1928,1931,1934,1937,1940,1943,1946,1949,1952,1955,1958,1961,1964,1967,1970,1973,1976,1979,1982,1985,1988,1991,1994,1997,2000,2003,2006,2009,2012,2015,2018,2021,2024,2027,2030,2033,2036,2039,2042,2045,2048,2051,2054,2057,2060,2063,2066,2069,2072,2075,2078,2081,2084,2087,2090,2093,2096,2099,2102,2105,2108,2111,2114,2117,2120,2123,2126,2129,2132,2135,2138,2141,2144,2147,2150,2153,2156,2159,2162,2165,2168,2171,2174,2177,2180,2183,2186,2189,2192,2195,2198,2201,2204,2207,2210,2213,2216,2219,2222,2225,2228,2231,2234,2237,2240,2243,2246,2249,2252,2255,2258,2261,2264,2267,2270,2273,2276,2279,2282,2285,2288],{"name":1348,"code":1349},"Amsterdam, Netherlands - (AMS)","AMS",{"name":1351,"code":1352},"Amman, Jordan - (AMM)","AMM",{"name":1354,"code":1355},"Adelaide, SA, Australia - (ADL)","ADL",{"name":1357,"code":1358},"Americana, Brazil - (QWJ)","QWJ",{"name":1360,"code":1361},"Accra, Ghana - (ACC)","ACC",{"name":1363,"code":1364},"Ahmedabad, India - (AMD)","AMD",{"name":1366,"code":1367},"Albuquerque, NM, United States - (ABQ)","ABQ",{"name":1369,"code":1370},"Auckland, New Zealand - (AKL)","AKL",{"name":1372,"code":1373},"Athens, Greece - (ATH)","ATH",{"name":1375,"code":1376},"Arica, Chile - (ARI)","ARI",{"name":1378,"code":1379},"Algiers, Algeria - (ALG)","ALG",{"name":1381,"code":1382},"Almaty, Kazakhstan - (ALA)","ALA",{"name":1384,"code":1385},"Astara, Azerbaijan - (LLK)","LLK",{"name":1387,"code":1388},"Anchorage, AK, United States - (ANC)","ANC",{"name":1390,"code":1391},"Ashburn, VA, United States - (IAD)","IAD",{"name":1393,"code":1394},"Brisbane, QLD, Australia - (BNE)","BNE",{"name":1396,"code":1397},"Barcelona, Spain - (BCN)","BCN",{"name":1399,"code":1400},"Baghdad, Iraq - (BGW)","BGW",{"name":1402,"code":1403},"Annaba, Algeria - (AAE)","AAE",{"name":1405,"code":1406},"Atlanta, GA, United States - (ATL)","ATL",{"name":1408,"code":1409},"Belgrade, Serbia - (BEG)","BEG",{"name":1411,"code":1412},"Baku, Azerbaijan - (GYD)","GYD",{"name":1414,"code":1415},"Bangalore, India - (BLR)","BLR",{"name":1417,"code":1418},"Antananarivo, Madagascar - (TNR)","TNR",{"name":1420,"code":1421},"Canberra, ACT, Australia - (CBR)","CBR",{"name":1423,"code":1424},"Berlin, Germany - (TXL)","TXL",{"name":1426,"code":1427},"Bangkok, Thailand - (BKK)","BKK",{"name":1429,"code":1430},"Cape Town, South Africa - (CPT)","CPT",{"name":1432,"code":1433},"Belo Horizonte, Brazil - (CNF)","CNF",{"name":1435,"code":1436},"Basra, Iraq - (BSR)","BSR",{"name":1438,"code":1439},"Christchurch, New Zealand - (CHC)","CHC",{"name":1441,"code":1442},"Austin, TX, United States - (AUS)","AUS",{"name":1444,"code":1445},"Beirut, Lebanon - (BEY)","BEY",{"name":1447,"code":1448},"Bandar Seri Begawan, Brunei - (BWN)","BWN",{"name":1450,"code":1451},"Blumenau, Brazil - (BNU)","BNU",{"name":1453,"code":1454},"Hagatna, Guam - (GUM)","GUM",{"name":1456,"code":1457},"Bangor, ME, United States - (BGR)","BGR",{"name":1459,"code":1460},"Bordeaux, France - (BOD)","BOD",{"name":1462,"code":1463},"Boston, MA, United States - (BOS)","BOS",{"name":1465,"code":1466},"Dakar, Senegal - (DKR)","DKR",{"name":1468,"code":1469},"Dammam, Saudi Arabia - (DMM)","DMM",{"name":1471,"code":1472},"Bratislava, Slovakia   - (BTS)","BTS",{"name":1474,"code":1475},"Melbourne, VIC, Australia - (MEL)","MEL",{"name":1477,"code":1478},"Doha, Qatar - (DOH)","DOH",{"name":1480,"code":1481},"Brussels, Belgium - (BRU)","BRU",{"name":1483,"code":1484},"Buffalo, NY, United States - (BUF)","BUF",{"name":1486,"code":1487},"Dar Es Salaam, Tanzania - (DAR)","DAR",{"name":1489,"code":1490},"Brasilia, Brazil - (BSB)","BSB",{"name":1492,"code":1493},"Buenos Aires, Argentina - (EZE)","EZE",{"name":1495,"code":1496},"Bucharest, Romania - (OTP)","OTP",{"name":1498,"code":1499},"Dubai, United Arab Emirates - (DXB)","DXB",{"name":1501,"code":1502},"Djibouti City, Djibouti - (JIB)","JIB",{"name":1504,"code":1505},"Calgary, AB, Canada - (YYC)","YYC",{"name":1507,"code":1508},"Cebu, Philippines - (CEB)","CEB",{"name":1510,"code":1511},"Noumea, New Caledonia - (NOU)","NOU",{"name":1513,"code":1514},"Perth, WA, Australia - (PER)","PER",{"name":1516,"code":1517},"Budapest, Hungary - (BUD)","BUD",{"name":1519,"code":1520},"Durban, South Africa - (DUR)","DUR",{"name":1522,"code":1523},"Charlotte, NC, United States - (CLT)","CLT",{"name":1525,"code":1526},"Erbil, Iraq - (EBL)","EBL",{"name":1528,"code":1529},"Chandigarh, India - (IXC)","IXC",{"name":1531,"code":1532},"Chicago, IL, United States - (ORD)","ORD",{"name":1534,"code":1535},"Sydney, NSW, Australia - (SYD)","SYD",{"name":1537,"code":1538},"Campinas, Brazil - (VCP)","VCP",{"name":1540,"code":1541},"Changde, China - (CGD)","CGD",{"name":1543,"code":1544},"Haifa, Israel - (HFA)","HFA",{"name":1546,"code":1547},"Gaborone, Botswana - (GBE)","GBE",{"name":1549,"code":1550},"Copenhagen, Denmark - (CPH)","CPH",{"name":1552,"code":1553},"Chennai, India - (MAA)","MAA",{"name":1555,"code":1556},"Harare, Zimbabwe - (HRE)","HRE",{"name":1558,"code":1559},"Jeddah, Saudi Arabia - (JED)","JED",{"name":1561,"code":1562},"Tahiti, French Polynesia - (PPT)","PPT",{"name":1564,"code":1565},"Cleveland, OH, United States - (CLE)","CLE",{"name":1567,"code":1568},"Johannesburg, South Africa - (JNB)","JNB",{"name":1570,"code":1571},"Kuwait City, Kuwait - (KWI)","KWI",{"name":1573,"code":1574},"Dublin, Ireland - (DUB)","DUB",{"name":1576,"code":1577},"Columbus, OH, United States - (CMH)","CMH",{"name":1579,"code":1580},"Suva, Fiji - (SUV)","SUV",{"name":1582,"code":1583},"Dallas, TX, United States - (DFW)","DFW",{"name":1585,"code":1586},"Manama, Bahrain - (BAH)","BAH",{"name":1588,"code":1589},"Kigali, Rwanda - (KGL)","KGL",{"name":1591,"code":1592},"Chittagong, Bangladesh - (CGP)","CGP",{"name":1594,"code":1595},"Hobart, Australia - (HBA)","HBA",{"name":1597,"code":1598},"Frankfurt, Germany - (FRA)","FRA",{"name":1600,"code":1601},"Muscat, Oman - (MCT)","MCT",{"name":1603,"code":1604},"Denver, CO, United States - (DEN)","DEN",{"name":1606,"code":1607},"Colombo, Sri Lanka - (CMB)","CMB",{"name":1609,"code":1610},"Lagos, Nigeria - (LOS)","LOS",{"name":1612,"code":1613},"Curitiba, Brazil - (CWB)","CWB",{"name":1615,"code":1616},"Wellington, New Zealand - (WLG)","WLG",{"name":1618,"code":1619},"Luanda, Angola - (LAD)","LAD",{"name":1621,"code":1622},"Detroit, MI, United States - (DTW)","DTW",{"name":1624,"code":1625},"Geneva, Switzerland - (GVA)","GVA",{"name":1627,"code":1628},"Dhaka, Bangladesh - (DAC)","DAC",{"name":1630,"code":1631},"Florianopolis, Brazil - (FLN)","FLN",{"name":1633,"code":1634},"Najaf, Iraq - (NJF)","NJF",{"name":1636,"code":1637},"Fortaleza, Brazil - (FOR)","FOR",{"name":1639,"code":1640},"Gothenburg, Sweden - (GOT)","GOT",{"name":1642,"code":1643},"Maputo, Mozambique - (MPM)","MPM",{"name":1645,"code":1646},"Foshan, China - (FUO)","FUO",{"name":1648,"code":1649},"Nasiriyah, Iraq - (XNH)","XNH",{"name":1651,"code":1652},"Durham, NC, United States - (RDU)","RDU",{"name":1654,"code":1655},"Mombasa, Kenya - (MBA)","MBA",{"name":1657,"code":1658},"Hamburg, Germany - (HAM)","HAM",{"name":1660,"code":1661},"Ramallah - (ZDM)","ZDM",{"name":1663,"code":1664},"Georgetown, Guyana - (GEO)","GEO",{"name":1666,"code":1667},"Fukuoka, Japan - (FUK)","FUK",{"name":1669,"code":1670},"Guadalajara, Mexico - (GDL)","GDL",{"name":1672,"code":1673},"Helsinki, Finland - (HEL)","HEL",{"name":1675,"code":1676},"Riyadh, Saudi Arabia - (RUH)","RUH",{"name":1678,"code":1679},"Nairobi, Kenya - (NBO)","NBO",{"name":1681,"code":1682},"Fuzhou, China - (FOC)","FOC",{"name":1684,"code":1685},"Halifax, Canada - (YHZ)","YHZ",{"name":1687,"code":1688},"Guangzhou, China - (CAN)","CAN",{"name":1690,"code":1691},"Istanbul, Turkey - (IST)","IST",{"name":1693,"code":1694},"Guatemala City, Guatemala - (GUA)","GUA",{"name":1696,"code":1697},"Honolulu, HI, United States - (HNL)","HNL",{"name":1699,"code":1700},"Sulaymaniyah, Iraq - (ISU)","ISU",{"name":1702,"code":1703},"Oran, Algeria - (ORN)","ORN",{"name":1705,"code":1706},"Tel Aviv, Israel - (TLV)","TLV",{"name":1708,"code":1709},"Houston, TX, United States - (IAH)","IAH",{"name":1711,"code":1712},"Guayaquil, Ecuador - (GYE)","GYE",{"name":1714,"code":1715},"Haikou, China - (HAK)","HAK",{"name":1717,"code":1718},"Ouagadougou, Burkina Faso   - (OUA)","OUA",{"name":1720,"code":1721},"Izmir, Turkey - (ADB)","ADB",{"name":1723,"code":1724},"Kyiv, Ukraine - (KBP)","KBP",{"name":1726,"code":1727},"Port Louis, Mauritius - (MRU)","MRU",{"name":1729,"code":1730},"Indianapolis, IN, United States - (IND)","IND",{"name":1732,"code":1733},"Hanoi, Vietnam - (HAN)","HAN",{"name":1735,"code":1736},"Lisbon, Portugal - (LIS)","LIS",{"name":1738,"code":1739},"Jacksonville, FL, United States - (JAX)","JAX",{"name":1741,"code":1742},"Hengshui, China - (SJW)","SJW",{"name":1744,"code":1745},"Joinville, Brazil - (JOI)","JOI",{"name":1747,"code":1748},"London, United Kingdom - (LHR)","LHR",{"name":1750,"code":1751},"Kansas City, MO, United States - (MCI)","MCI",{"name":1753,"code":1754},"Ho Chi Minh City, Vietnam - (SGN)","SGN",{"name":1756,"code":1757},"Tunis, Tunisia - (TUN)","TUN",{"name":1759,"code":1760},"Juazeiro do Norte, Brazil - (JDO)","JDO",{"name":1762,"code":155},"Hong Kong - (HKG)",{"name":1764,"code":1765},"Lima, Peru - (LIM)","LIM",{"name":1767,"code":1768},"Luxembourg City, Luxembourg - (LUX)","LUX",{"name":1770,"code":1771},"Kingston, Jamaica - (KIN)","KIN",{"name":1773,"code":1774},"Kinshasa, DR Congo - (FIH)","FIH",{"name":1776,"code":1777},"Las Vegas, NV, United States - (LAS)","LAS",{"name":1779,"code":1780},"Hyderabad, India - (HYD)","HYD",{"name":1782,"code":1783},"Manaus, Brazil - (MAO)","MAO",{"name":1785,"code":1786},"Lyon, France - (LYS)","LYS",{"name":1788,"code":1789},"Cairo, Egypt - (CAI)","CAI",{"name":1791,"code":1792},"Los Angeles, CA, United States - (LAX)","LAX",{"name":1794,"code":1795},"Madrid, Spain - (MAD)","MAD",{"name":1797,"code":1798},"Islamabad, Pakistan - (ISB)","ISB",{"name":1800,"code":1801},"Windhoek, Namibia - (WDH)","WDH",{"name":1803,"code":1804},"Manchester, United Kingdom - (MAN)","MAN",{"name":1806,"code":1807},"Memphis, TN, United States - (MEM)","MEM",{"name":1809,"code":1810},"Jakarta, Indonesia - (CGK)","CGK",{"name":1812,"code":1813},"Yamoussoukro, Ivory Coast - (ASK)","ASK",{"name":1815,"code":1816},"Marseille, France - (MRS)","MRS",{"name":1818,"code":1819},"Panama City, Panama - (PTY)","PTY",{"name":1821,"code":1822},"Mexico City, Mexico - (MEX)","MEX",{"name":1824,"code":1825},"Abidjan, Ivory Coast - (ABJ)","ABJ",{"name":1827,"code":1828},"Miami, FL, United States - (MIA)","MIA",{"name":1830,"code":1831},"Milan, Italy - (MXP)","MXP",{"name":1833,"code":1834},"Jinan, China - (TNA)","TNA",{"name":1836,"code":1837},"Paramaribo, Suriname - (PBM)","PBM",{"name":1839,"code":1840},"Kampala, Uganda - (EBB)","EBB",{"name":1842,"code":1843},"Minneapolis, MN, United States - (MSP)","MSP",{"name":1845,"code":1846},"Porto Alegre, Brazil - (POA)","POA",{"name":1848,"code":1849},"Minsk, Belarus - (MSQ)","MSQ",{"name":1851,"code":1852},"Moscow, Russia - (DME)","DME",{"name":1854,"code":1855},"Johor Bahru, Malaysia - (JHB)","JHB",{"name":1857,"code":1858},"Quito, Ecuador - (UIO)","UIO",{"name":1860,"code":1861},"Munich, Germany - (MUC)","MUC",{"name":1863,"code":1864},"Kanpur, India - (KNU)","KNU",{"name":1866,"code":1867},"Nashville, United States - (BNA)","BNA",{"name":1869,"code":1870},"Newark, NJ, United States - (EWR)","EWR",{"name":1872,"code":1873},"Nicosia, Cyprus - (LCA)","LCA",{"name":1875,"code":1876},"Kaohsiung City, Taiwan - (KHH)","KHH",{"name":1878,"code":1879},"Recife, Brazil - (REC)","REC",{"name":1881,"code":1882},"Oslo, Norway - (OSL)","OSL",{"name":1884,"code":1885},"Norfolk, VA, United States - (ORF)","ORF",{"name":1887,"code":1888},"Karachi, Pakistan - (KHI)","KHI",{"name":1890,"code":1891},"Ribeirao Preto, Brazil - (RAO)","RAO",{"name":1893,"code":1894},"Rio de Janeiro, Brazil - (GIG)","GIG",{"name":1896,"code":1897},"Kathmandu, Nepal - (KTM)","KTM",{"name":1899,"code":1900},"Palermo, Italy - (PMO)","PMO",{"name":1902,"code":1903},"Oklahoma City, OK, United States - (OKC)","OKC",{"name":1905,"code":1906},"Paris, France - (CDG)","CDG",{"name":1908,"code":1909},"Omaha, NE, United States - (OMA)","OMA",{"name":1911,"code":1912},"Prague, Czech Republic - (PRG)","PRG",{"name":1914,"code":1915},"Kolkata, India - (CCU)","CCU",{"name":1917,"code":1918},"Ottawa, Canada - (YOW)","YOW",{"name":1920,"code":1921},"Santiago, Chile - (SCL)","SCL",{"name":1923,"code":1924},"Philadelphia, United States - (PHL)","PHL",{"name":1926,"code":1927},"Krasnoyarsk, Russia - (KJA)","KJA",{"name":1929,"code":1930},"Lusaka, Zambia - (LUN)","LUN",{"name":1932,"code":1933},"Kuala Lumpur, Malaysia - (KUL)","KUL",{"name":1935,"code":1936},"Phoenix, AZ, United States - (PHX)","PHX",{"name":1938,"code":1939},"Riga, Latvia - (RIX)","RIX",{"name":1941,"code":1942},"Santo Domingo, Dominican Republic - (SDQ)","SDQ",{"name":1944,"code":1945},"Addis Ababa, Ethiopia - (ADD)","ADD",{"name":1947,"code":1948},"Rome, Italy - (FCO)","FCO",{"name":1950,"code":1951},"Pittsburgh, PA, United States - (PIT)","PIT",{"name":1953,"code":1954},"Lilongwe, Malawi - (LLW)","LLW",{"name":1956,"code":1957},"Portland, OR, United States - (PDX)","PDX",{"name":1959,"code":1960},"Saint Petersburg, Russia - (LED)","LED",{"name":1962,"code":1963},"Langfang, China - (PKX)","PKX",{"name":1965,"code":1966},"Constantine, Algeria - (CZL)","CZL",{"name":1968,"code":1969},"Queretaro, MX, Mexico - (QRO)","QRO",{"name":1971,"code":1972},"Santa Venera, Malta - (MLA)","MLA",{"name":1974,"code":1975},"Richmond, VA, United States - (RIC)","RIC",{"name":1977,"code":1978},"Sorocaba, Brazil - (SOD)","SOD",{"name":1980,"code":1981},"Skopje, North Macedonia - (SKP)","SKP",{"name":1983,"code":1984},"Sofia, Bulgaria - (SOF)","SOF",{"name":1986,"code":1987},"Macau - (MFM)","MFM",{"name":1989,"code":1990},"Sacramento, CA, United States - (SMF)","SMF",{"name":1992,"code":1993},"Stockholm, Sweden - (ARN)","ARN",{"name":1995,"code":1996},"Salt Lake City, UT, United States - (SLC)","SLC",{"name":1998,"code":1999},"Tegucigalpa, Honduras - (TGU)","TGU",{"name":2001,"code":2002},"Stuttgart, Germany   - (STR)","STR",{"name":2004,"code":2005},"San Antonio, TX, United States - (SAT)","SAT",{"name":2007,"code":2008},"Manila, Philippines - (MNL)","MNL",{"name":2010,"code":2011},"San Diego, CA, United States - (SAN)","SAN",{"name":2013,"code":2014},"Tallinn, Estonia - (TLL)","TLL",{"name":2016,"code":2017},"Mumbai, India - (BOM)","BOM",{"name":2019,"code":2020},"Tbilisi, Georgia - (TBS)","TBS",{"name":2022,"code":2023},"San Francisco, CA, United States - (SFO)","SFO",{"name":2025,"code":2026},"Vitoria, Brazil - (VIX)","VIX",{"name":2028,"code":2029},"San Jose, CA, United States - (SJC)","SJC",{"name":2031,"code":2032},"Thessaloniki, Greece - (SKG)","SKG",{"name":2034,"code":2035},"Nagpur, India - (NAG)","NAG",{"name":2037,"code":2038},"Saskatoon, SK, Canada - (YXE)","YXE",{"name":2040,"code":2041},"Naha, Japan  - (OKA)","OKA",{"name":2043,"code":2044},"Tirana, Albania - (TIA)","TIA",{"name":2046,"code":2047},"Campos dos Goytacazes, Brazil - (CAW)","CAW",{"name":2049,"code":2050},"Seattle, WA, United States - (SEA)","SEA",{"name":2052,"code":2053},"Vienna, Austria - (VIE)","VIE",{"name":2055,"code":2056},"New Delhi, India - (DEL)","DEL",{"name":2058,"code":2059},"Chapeco, Brazil - (XAP)","XAP",{"name":2061,"code":2062},"Osaka, Japan - (KIX)","KIX",{"name":2064,"code":2065},"Vilnius, Lithuania - (VNO)","VNO",{"name":2067,"code":2068},"Sioux Falls, SD, United States - (FSD)","FSD",{"name":2070,"code":2071},"Bridgetown, Barbados - (BGI)","BGI",{"name":2073,"code":2074},"Warsaw, Poland - (WAW)","WAW",{"name":2076,"code":2077},"Patna, India - (PAT)","PAT",{"name":2079,"code":2080},"Phnom Penh, Cambodia - (PNH)","PNH",{"name":2082,"code":2083},"Tallahassee, FL, United States - (TLH)","TLH",{"name":2085,"code":2086},"Santiago de los Caballeros, Dominican Republic - (STI)","STI",{"name":2088,"code":2089},"Wroclaw, Poland - (WRO)","WRO",{"name":2091,"code":2092},"Zagreb, Croatia - (ZAG)","ZAG",{"name":2094,"code":2095},"Qingdao, China - (TAO)","TAO",{"name":2097,"code":2098},"Tampa, FL, United States - (TPA)","TPA",{"name":2100,"code":2101},"La Paz, Bolivia - (LPB)","LPB",{"name":2103,"code":2104},"Toronto, ON, Canada - (YYZ)","YYZ",{"name":2106,"code":2107},"Seoul, South Korea - (ICN)","ICN",{"name":2109,"code":2110},"Zurich, Switzerland - (ZRH)","ZRH",{"name":2112,"code":2113},"Vancouver, BC, Canada - (YVR)","YVR",{"name":2115,"code":2116},"Shanghai, China - (SHA)","SHA",{"name":2118,"code":2119},"San Juan, Puerto Rico - (SJU)","SJU",{"name":2121,"code":2122},"Singapore, Singapore - (SIN)","SIN",{"name":2124,"code":2125},"Winnipeg, MB, Canada - (YWG)","YWG",{"name":2127,"code":2128},"Barranquilla, Colombia - (BAQ)","BAQ",{"name":2130,"code":2131},"Surat Thani, Thailand - (URT)","URT",{"name":2133,"code":2134},"Palmas, Brazil - (PMW)","PMW",{"name":2136,"code":2137},"Taipei - (TPE)","TPE",{"name":2139,"code":2140},"Aracatuba, Brazil - (ARU)","ARU",{"name":2142,"code":2143},"Port of Spain, Trinidad and Tobago - (POS)","POS",{"name":2145,"code":2146},"Salvador, Brazil - (SSA)","SSA",{"name":2148,"code":2149},"Tokyo, Japan - (NRT)","NRT",{"name":2151,"code":2152},"Ulaanbaatar, Mongolia - (ULN)","ULN",{"name":2154,"code":2155},"Vientiane, Laos - (VTE)","VTE",{"name":2157,"code":2158},"Xinyu, China - (KHN)","KHN",{"name":2160,"code":2161},"Yerevan, Armenia - (EVN)","EVN",{"name":2163,"code":2164},"Yogyakarta, Indonesia - (JOG)","JOG",{"name":2166,"code":2167},"Cagayan de Oro, Philippines - (CGY)","CGY",{"name":2169,"code":2170},"Ljubljana, Slovenia - (LJU)","LJU",{"name":2172,"code":2173},"Kochi, India - (COK)","COK",{"name":2175,"code":2176},"Cuiaba, Brazil - (CGB)","CGB",{"name":2178,"code":2179},"Denpasar, Indonesia - (DPS)","DPS",{"name":2181,"code":2182},"Kannur, India - (CNN)","CNN",{"name":2184,"code":2185},"Cali, Colombia - (CLO)","CLO",{"name":2187,"code":2188},"San Pedro Sula, Honduras - (SAP)","SAP",{"name":2190,"code":2191},"Shenzhen, China - (SZX)","SZX",{"name":2193,"code":2194},"Guiyang, China - (KWE)","KWE",{"name":2196,"code":2197},"Shaoxing, China - (HGH)","HGH",{"name":2199,"code":2200},"Changzhou, China - (CZX)","CZX",{"name":2202,"code":2203},"Kunming, China - (KMG)","KMG",{"name":2205,"code":2206},"Chiang Mai, Thailand - (CNX)","CNX",{"name":2208,"code":2209},"Zhengzhou, China - (CGO)","CGO",{"name":2211,"code":2212},"Yangquan, China - (TYN)","TYN",{"name":2214,"code":2215},"Changsha, China - (CSX)","CSX",{"name":2217,"code":2218},"Dalian, China - (DLC)","DLC",{"name":2220,"code":2221},"Beihai, China - (BHY)","BHY",{"name":2223,"code":2224},"Chongqing, China - (CKG)","CKG",{"name":2226,"code":2227},"Xiangyang, China - (XFN)","XFN",{"name":2229,"code":2230},"Da Nang, Vietnam - (DAD)","DAD",{"name":2232,"code":2233},"Jiaxing, China - (JXG)","JXG",{"name":2235,"code":2236},"Tarlac City, Philippines - (CRK)","CRK",{"name":2238,"code":2239},"Thimphu, Bhutan - (PBH)","PBH",{"name":2241,"code":2242},"Baoji, China - (XIY)","XIY",{"name":2244,"code":2245},"Astana, Kazakhstan - (NQZ)","NQZ",{"name":2247,"code":2248},"Kuching, Malaysia - (KCH)","KCH",{"name":2250,"code":2251},"Aktobe, Kazakhstan - (AKX)","AKX",{"name":2253,"code":2254},"Tongren, China - (TEN)","TEN",{"name":2256,"code":2257},"Taizhou, China - (HYN)","HYN",{"name":2259,"code":2260},"Bishkek, Kyrgyzstan - (FRU)","FRU",{"name":2262,"code":2263},"Malang, Indonesia - (MLG)","MLG",{"name":2265,"code":2266},"Lahore, Pakistan - (LHE)","LHE",{"name":2268,"code":2269},"Chengdu, China - (CTU)","CTU",{"name":2271,"code":2272},"Agra, India - (AGR)","AGR",{"name":2274,"code":2275},"Coimbatore, India - (CJB)","CJB",{"name":2277,"code":2278},"Xingyi, China - (ACX)","ACX",{"name":2280,"code":2281},"Bhubaneswar, India - (BBI)","BBI",{"name":2283,"code":2284},"Luoyang, China - (LYA)","LYA",{"name":2286,"code":2287},"Pune, India - (PNQ)","PNQ",{"name":2289,"code":2290},"Sambalpur, India - (JRG)","JRG",1779981580426]