2019-10-20 12:03:52 +00:00
2020-02-03 04:33:25 +00:00
< ! DOCTYPE html >
< html lang = " en " >
< head >
< meta charset = " utf-8 " >
< link rel = " dns-prefetch " href = " https://github.githubassets.com " >
< link rel = " dns-prefetch " href = " https://avatars0.githubusercontent.com " >
< link rel = " dns-prefetch " href = " https://avatars1.githubusercontent.com " >
< link rel = " dns-prefetch " href = " https://avatars2.githubusercontent.com " >
< link rel = " dns-prefetch " href = " https://avatars3.githubusercontent.com " >
< link rel = " dns-prefetch " href = " https://github-cloud.s3.amazonaws.com " >
< link rel = " dns-prefetch " href = " https://user-images.githubusercontent.com/ " >
2019-10-20 12:03:52 +00:00
2020-02-03 04:33:25 +00:00
< link crossorigin = " anonymous " media = " all " integrity = " sha512-4bmhxCob3U2WoK8HVl7UacoDdNejo+50BlGN9SdGtjXbsCQwp7uLtntLkL9a9CmgLPZ8L9lsOZL0ieINT9yHeA== " rel = " stylesheet " href = " https://github.githubassets.com/assets/frameworks-2fd1891c9e6292401a1a3de8bc3f747f.css " / >
< link crossorigin = " anonymous " media = " all " integrity = " sha512-1N4+QlbmRp6tyqxbm0KgsAq2CEnAm9g3BY5xUsD38O+IUdydhO7ltbRnpR2Vn4g5SXipGWiiwQO1HUYLDV136Q== " rel = " stylesheet " href = " https://github.githubassets.com/assets/site-09367dd1ae1784b858e71c8471ca0949.css " / >
< link crossorigin = " anonymous " media = " all " integrity = " sha512-oF4BPgLoJ4I8H6vdTzR4cGdwAF4bC/bdeI7zsQ/xzUbUWc+JU6xeSbOxIgOyelZP+1ESc5qfwDKzYQfdDNlX5Q== " rel = " stylesheet " href = " https://github.githubassets.com/assets/github-5238587550334d8b43fd71226c6de55c.css " / >
2019-10-20 12:03:52 +00:00
2020-02-03 04:33:25 +00:00
< meta name = " viewport " content = " width=device-width " >
< title > openwrt / json_add_image_info . py at master · openwrt / openwrt · GitHub < / title >
< meta name = " description " content = " This repository is a mirror of https://git.openwrt.org/openwrt/openwrt.git It is for reference only and is not active for check-ins or for reporting issues. We will continue to accept Pull Requests here. They will be merged via staging trees then into openwrt.git. All issues should be reported at: https://bugs.openwrt.org - openwrt/openwrt " >
< link rel = " search " type = " application/opensearchdescription+xml " href = " /opensearch.xml " title = " GitHub " >
< link rel = " fluid-icon " href = " https://github.com/fluidicon.png " title = " GitHub " >
< meta property = " fb:app_id " content = " 1401488693436528 " >
2019-10-20 12:03:52 +00:00
2020-02-03 04:33:25 +00:00
< meta name = " twitter:image:src " content = " https://avatars2.githubusercontent.com/u/2528830?s=400&v=4 " / > < meta name = " twitter:site " content = " @github " / > < meta name = " twitter:card " content = " summary " / > < meta name = " twitter:title " content = " openwrt/openwrt " / > < meta name = " twitter:description " content = " This repository is a mirror of https://git.openwrt.org/openwrt/openwrt.git It is for reference only and is not active for check-ins or for reporting issues. We will continue to accept Pull Request... " / >
< meta property = " og:image " content = " https://avatars2.githubusercontent.com/u/2528830?s=400&v=4 " / > < meta property = " og:site_name " content = " GitHub " / > < meta property = " og:type " content = " object " / > < meta property = " og:title " content = " openwrt/openwrt " / > < meta property = " og:url " content = " https://github.com/openwrt/openwrt " / > < meta property = " og:description " content = " This repository is a mirror of https://git.openwrt.org/openwrt/openwrt.git It is for reference only and is not active for check-ins or for reporting issues. We will continue to accept Pull Request... " / >
2019-10-20 12:03:52 +00:00
2020-02-03 04:33:25 +00:00
< link rel = " assets " href = " https://github.githubassets.com/ " >
< meta name = " request-id " content = " CE8B:322B:EBD1C4:156E56F:5DAC4D0A " data - pjax - transient >
2019-10-20 12:03:52 +00:00
2020-02-03 04:33:25 +00:00
< meta name = " selected-link " value = " repo_source " data - pjax - transient >
< meta name = " google-site-verification " content = " KT5gs8h0wvaagLKAVWq8bbeNwnZZK1r1XQysX3xurLU " >
< meta name = " google-site-verification " content = " ZzhVyEFwb7w3e0-uOTltm8Jsck2F5StVihD0exw2fsA " >
< meta name = " google-site-verification " content = " GXs5KoUUkNCoaAZn7wPN-t01Pywp9M3sEjnt_3_ZWPc " >
< meta name = " octolytics-host " content = " collector.githubapp.com " / > < meta name = " octolytics-app-id " content = " github " / > < meta name = " octolytics-event-url " content = " https://collector.githubapp.com/github-external/browser_event " / > < meta name = " octolytics-dimension-request_id " content = " CE8B:322B:EBD1C4:156E56F:5DAC4D0A " / > < meta name = " octolytics-dimension-region_edge " content = " ap-northeast-1 " / > < meta name = " octolytics-dimension-region_render " content = " iad " / > < meta name = " octolytics-dimension-ga_id " content = " " class = " js-octo-ga-id " / > < meta name = " octolytics-dimension-visitor_id " content = " 2470552824743480586 " / >
< meta name = " analytics-location " content = " /<user-name>/<repo-name>/blob/show " data - pjax - transient = " true " / >
< meta name = " google-analytics " content = " UA-3769691-2 " >
< meta class = " js-ga-set " name = " dimension1 " content = " Logged Out " >
< meta name = " hostname " content = " github.com " >
< meta name = " user-login " content = " " >
< meta name = " expected-hostname " content = " github.com " >
< meta name = " js-proxy-site-detection-payload " content = " NDc4NjdlMjE2MTBjNGRjYzNjNjVlOWNkOGE0YWEyZDQ3ZTBmNTBhMzM1OWRkYmJjNDAzNTA4Y2RhMjU3ODRjZnx7InJlbW90ZV9hZGRyZXNzIjoiMjEzLjEzOS4yMzIuMzMiLCJyZXF1ZXN0X2lkIjoiQ0U4QjozMjJCOkVCRDFDNDoxNTZFNTZGOjVEQUM0RDBBIiwidGltZXN0YW1wIjoxNTcxNTczMDAyLCJob3N0IjoiZ2l0aHViLmNvbSJ9 " >
< meta name = " enabled-features " content = " ACTIONS_V2_ON_MARKETPLACE,MARKETPLACE_FEATURED_BLOG_POSTS,MARKETPLACE_INVOICED_BILLING,MARKETPLACE_SOCIAL_PROOF_CUSTOMERS,MARKETPLACE_TRENDING_SOCIAL_PROOF,MARKETPLACE_RECOMMENDATIONS,MARKETPLACE_PENDING_INSTALLATIONS " >
< meta name = " html-safe-nonce " content = " f6807a1146487cca179485d3b1d2f760ac8dca40 " >
< meta http - equiv = " x-pjax-version " content = " 1cf606da5c0eb0678f3df7841bd6b83a " >
< link href = " https://github.com/openwrt/openwrt/commits/master.atom " rel = " alternate " title = " Recent Commits to openwrt:master " type = " application/atom+xml " >
< meta name = " go-import " content = " github.com/openwrt/openwrt git https://github.com/openwrt/openwrt.git " >
< meta name = " octolytics-dimension-user_id " content = " 2528830 " / > < meta name = " octolytics-dimension-user_login " content = " openwrt " / > < meta name = " octolytics-dimension-repository_id " content = " 45821540 " / > < meta name = " octolytics-dimension-repository_nwo " content = " openwrt/openwrt " / > < meta name = " octolytics-dimension-repository_public " content = " true " / > < meta name = " octolytics-dimension-repository_is_fork " content = " false " / > < meta name = " octolytics-dimension-repository_network_root_id " content = " 45821540 " / > < meta name = " octolytics-dimension-repository_network_root_nwo " content = " openwrt/openwrt " / > < meta name = " octolytics-dimension-repository_explore_github_marketplace_ci_cta_shown " content = " false " / >
< link rel = " canonical " href = " https://github.com/openwrt/openwrt/blob/master/scripts/json_add_image_info.py " data - pjax - transient >
< meta name = " browser-stats-url " content = " https://api.github.com/_private/browser/stats " >
< meta name = " browser-errors-url " content = " https://api.github.com/_private/browser/errors " >
< link rel = " mask-icon " href = " https://github.githubassets.com/pinned-octocat.svg " color = " #000000 " >
< link rel = " icon " type = " image/x-icon " class = " js-site-favicon " href = " https://github.githubassets.com/favicon.ico " >
< meta name = " theme-color " content = " #1e2327 " >
< link rel = " manifest " href = " /manifest.json " crossOrigin = " use-credentials " >
< / head >
< body class = " logged-out env-production page-responsive page-blob " >
< div class = " position-relative js-header-wrapper " >
< a href = " #start-of-content " tabindex = " 1 " class = " px-2 py-4 bg-blue text-white show-on-focus js-skip-to-content " > Skip to content < / a >
< span class = " Progress progress-pjax-loader position-fixed width-full js-pjax-loader-bar " >
< span class = " progress-pjax-loader-bar top-0 left-0 " style = " width: 0 % ; " > < / span >
< / span >
< header class = " Header-old header-logged-out js-details-container Details position-relative f4 py-2 " role = " banner " >
< div class = " container-lg d-lg-flex flex-items-center p-responsive " >
< div class = " d-flex flex-justify-between flex-items-center " >
< a class = " mr-4 " href = " https://github.com/ " aria - label = " Homepage " data - ga - click = " (Logged out) Header, go to homepage, icon:logo-wordmark " >
< svg height = " 32 " class = " octicon octicon-mark-github text-white " viewBox = " 0 0 16 16 " version = " 1.1 " width = " 32 " aria - hidden = " true " > < path fill - rule = " evenodd " d = " M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z " / > < / svg >
< / a >
< div class = " d-lg-none css-truncate css-truncate-target width-fit p-2 " >
< svg class = " octicon octicon-repo " viewBox = " 0 0 12 16 " version = " 1.1 " width = " 12 " height = " 16 " aria - hidden = " true " > < path fill - rule = " evenodd " d = " M4 9H3V8h1v1zm0-3H3v1h1V6zm0-2H3v1h1V4zm0-2H3v1h1V2zm8-1v12c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1zm-1 10H1v2h2v-1h3v1h5v-2zm0-10H2v9h9V1z " / > < / svg >
< a class = " Header-link " href = " /openwrt " > openwrt < / a >
/
< a class = " Header-link " href = " /openwrt/openwrt " > openwrt < / a >
< / div >
< div class = " d-flex flex-items-center " >
< a href = " /join?source=header-repo "
class = " d-inline-block d-lg-none f5 text-white no-underline border border-gray-dark rounded-2 px-2 py-1 mr-3 mr-sm-5 "
data - hydro - click = " { "event_type":"authentication.click","payload": { "location_in_page":"site header","repository_id":null,"auth_type":"SIGN_UP","client_id":null,"originating_request_id":"CE8B:322B:EBD1C4:156E56F:5DAC4D0A","originating_url":"https://github.com/openwrt/openwrt/blob/master/scripts/json_add_image_info.py","referrer":null,"user_id":null}} " data - hydro - click - hmac = " a47a83e14320f2bba56224800bfbc0bad8d3aa7a1e4976ce3ca329953788062e "
data - ga - click = " (Logged out) Header, clicked Sign up, text:sign-up " >
Sign & nbsp ; up
< / a >
< button class = " btn-link d-lg-none mt-1 js-details-target " type = " button " aria - label = " Toggle navigation " aria - expanded = " false " >
< svg height = " 24 " class = " octicon octicon-three-bars text-white " viewBox = " 0 0 12 16 " version = " 1.1 " width = " 18 " aria - hidden = " true " > < path fill - rule = " evenodd " d = " M11.41 9H.59C0 9 0 8.59 0 8c0-.59 0-1 .59-1H11.4c.59 0 .59.41.59 1 0 .59 0 1-.59 1h.01zm0-4H.59C0 5 0 4.59 0 4c0-.59 0-1 .59-1H11.4c.59 0 .59.41.59 1 0 .59 0 1-.59 1h.01zM.59 11H11.4c.59 0 .59.41.59 1 0 .59 0 1-.59 1H.59C0 13 0 12.59 0 12c0-.59 0-1 .59-1z " / > < / svg >
< / button >
< / div >
< / div >
< div class = " HeaderMenu HeaderMenu--logged-out position-fixed top-0 right-0 bottom-0 height-fit position-lg-relative d-lg-flex flex-justify-between flex-items-center flex-auto " >
< div class = " d-flex d-lg-none flex-justify-end border-bottom bg-gray-light p-3 " >
< button class = " btn-link js-details-target " type = " button " aria - label = " Toggle navigation " aria - expanded = " false " >
< svg height = " 24 " class = " octicon octicon-x text-gray " viewBox = " 0 0 12 16 " version = " 1.1 " width = " 18 " aria - hidden = " true " > < path fill - rule = " evenodd " d = " M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48L7.48 8z " / > < / svg >
< / button >
< / div >
< nav class = " mt-0 px-3 px-lg-0 mb-5 mb-lg-0 " aria - label = " Global " >
< ul class = " d-lg-flex list-style-none " >
< li class = " d-block d-lg-flex flex-lg-nowrap flex-lg-items-center border-bottom border-lg-bottom-0 mr-0 mr-lg-3 edge-item-fix position-relative flex-wrap flex-justify-between d-flex flex-items-center " >
< details class = " HeaderMenu-details details-overlay details-reset width-full " >
< summary class = " HeaderMenu-summary HeaderMenu-link px-0 py-3 border-0 no-wrap d-block d-lg-inline-block " >
Why GitHub ?
< svg x = " 0px " y = " 0px " viewBox = " 0 0 14 8 " xml : space = " preserve " fill = " none " class = " icon-chevon-down-mktg position-absolute position-lg-relative " >
< path d = " M1,1l6.2,6L13,1 " > < / path >
< / svg >
< / summary >
< div class = " dropdown-menu flex-auto rounded-1 bg-white px-0 mt-0 pb-4 p-lg-4 position-relative position-lg-absolute left-0 left-lg-n4 " >
< a href = " /features " class = " py-2 lh-condensed-ultra d-block link-gray-dark no-underline h5 Bump-link--hover " data - ga - click = " (Logged out) Header, go to Features " > Features < span class = " Bump-link-symbol float-right text-normal text-gray-light " > & rarr ; < / span > < / a >
< ul class = " list-style-none f5 pb-3 " >
< li class = " edge-item-fix " > < a href = " /features/code-review/ " class = " py-2 lh-condensed-ultra d-block link-gray no-underline f5 " data - ga - click = " (Logged out) Header, go to Code review " > Code review < / a > < / li >
< li class = " edge-item-fix " > < a href = " /features/project-management/ " class = " py-2 lh-condensed-ultra d-block link-gray no-underline f5 " data - ga - click = " (Logged out) Header, go to Project management " > Project management < / a > < / li >
< li class = " edge-item-fix " > < a href = " /features/integrations " class = " py-2 lh-condensed-ultra d-block link-gray no-underline f5 " data - ga - click = " (Logged out) Header, go to Integrations " > Integrations < / a > < / li >
< li class = " edge-item-fix " > < a href = " /features/actions " class = " py-2 lh-condensed-ultra d-block link-gray no-underline f5 " data - ga - click = " (Logged out) Header, go to Actions " > Actions < / a >
< li class = " edge-item-fix " > < a href = " /features/package-registry " class = " py-2 lh-condensed-ultra d-block link-gray no-underline f5 " data - ga - click = " (Logged out) Header, go to Package Registry " > Package registry < / a >
< li class = " edge-item-fix " > < a href = " /features/security " class = " py-2 lh-condensed-ultra d-block link-gray no-underline f5 " data - ga - click = " (Logged out) Header, go to Security " > Security < / a >
< li class = " edge-item-fix " > < a href = " /features#team-management " class = " py-2 lh-condensed-ultra d-block link-gray no-underline f5 " data - ga - click = " (Logged out) Header, go to Team management " > Team management < / a > < / li >
< li class = " edge-item-fix " > < a href = " /features#social-coding " class = " py-2 lh-condensed-ultra d-block link-gray no-underline f5 " data - ga - click = " (Logged out) Header, go to Social coding " > Social coding < / a > < / li >
< li class = " edge-item-fix " > < a href = " /features#documentation " class = " py-2 lh-condensed-ultra d-block link-gray no-underline f5 " data - ga - click = " (Logged out) Header, go to Documentation " > Documentation < / a > < / li >
< li class = " edge-item-fix " > < a href = " /features#code-hosting " class = " py-2 lh-condensed-ultra d-block link-gray no-underline f5 " data - ga - click = " (Logged out) Header, go to Code hosting " > Code hosting < / a > < / li >
< / ul >
< ul class = " list-style-none mb-0 border-lg-top pt-lg-3 " >
< li class = " edge-item-fix " > < a href = " /customer-stories " class = " py-2 lh-condensed-ultra d-block no-underline link-gray-dark no-underline h5 Bump-link--hover " data - ga - click = " (Logged out) Header, go to Customer stories " > Customer stories < span class = " Bump-link-symbol float-right text-normal text-gray-light " > & rarr ; < / span > < / a > < / li >
< li class = " edge-item-fix " > < a href = " /security " class = " py-2 lh-condensed-ultra d-block no-underline link-gray-dark no-underline h5 Bump-link--hover " data - ga - click = " (Logged out) Header, go to Security " > Security < span class = " Bump-link-symbol float-right text-normal text-gray-light " > & rarr ; < / span > < / a > < / li >
< / ul >
< / div >
< / details >
< / li >
< li class = " border-bottom border-lg-bottom-0 mr-0 mr-lg-3 " >
< a href = " /enterprise " class = " HeaderMenu-link no-underline py-3 d-block d-lg-inline-block " data - ga - click = " (Logged out) Header, go to Enterprise " > Enterprise < / a >
< / li >
< li class = " d-block d-lg-flex flex-lg-nowrap flex-lg-items-center border-bottom border-lg-bottom-0 mr-0 mr-lg-3 edge-item-fix position-relative flex-wrap flex-justify-between d-flex flex-items-center " >
< details class = " HeaderMenu-details details-overlay details-reset width-full " >
< summary class = " HeaderMenu-summary HeaderMenu-link px-0 py-3 border-0 no-wrap d-block d-lg-inline-block " >
Explore
< svg x = " 0px " y = " 0px " viewBox = " 0 0 14 8 " xml : space = " preserve " fill = " none " class = " icon-chevon-down-mktg position-absolute position-lg-relative " >
< path d = " M1,1l6.2,6L13,1 " > < / path >
< / svg >
< / summary >
< div class = " dropdown-menu flex-auto rounded-1 bg-white px-0 pt-2 pb-0 mt-0 pb-4 p-lg-4 position-relative position-lg-absolute left-0 left-lg-n4 " >
< ul class = " list-style-none mb-3 " >
< li class = " edge-item-fix " > < a href = " /explore " class = " py-2 lh-condensed-ultra d-block link-gray-dark no-underline h5 Bump-link--hover " data - ga - click = " (Logged out) Header, go to Explore " > Explore GitHub < span class = " Bump-link-symbol float-right text-normal text-gray-light " > & rarr ; < / span > < / a > < / li >
< / ul >
< h4 class = " text-gray-light text-normal text-mono f5 mb-2 border-lg-top pt-lg-3 " > Learn & amp ; contribute < / h4 >
< ul class = " list-style-none mb-3 " >
< li class = " edge-item-fix " > < a href = " /topics " class = " py-2 lh-condensed-ultra d-block link-gray no-underline f5 " data - ga - click = " (Logged out) Header, go to Topics " > Topics < / a > < / li >
< li class = " edge-item-fix " > < a href = " /collections " class = " py-2 lh-condensed-ultra d-block link-gray no-underline f5 " data - ga - click = " (Logged out) Header, go to Collections " > Collections < / a > < / li >
< li class = " edge-item-fix " > < a href = " /trending " class = " py-2 lh-condensed-ultra d-block link-gray no-underline f5 " data - ga - click = " (Logged out) Header, go to Trending " > Trending < / a > < / li >
< li class = " edge-item-fix " > < a href = " https://lab.github.com/ " class = " py-2 lh-condensed-ultra d-block link-gray no-underline f5 " data - ga - click = " (Logged out) Header, go to Learning lab " > Learning Lab < / a > < / li >
< li class = " edge-item-fix " > < a href = " https://opensource.guide " class = " py-2 lh-condensed-ultra d-block link-gray no-underline f5 " data - ga - click = " (Logged out) Header, go to Open source guides " > Open source guides < / a > < / li >
< / ul >
< h4 class = " text-gray-light text-normal text-mono f5 mb-2 border-lg-top pt-lg-3 " > Connect with others < / h4 >
< ul class = " list-style-none mb-0 " >
< li class = " edge-item-fix " > < a href = " https://github.com/events " class = " py-2 lh-condensed-ultra d-block link-gray no-underline f5 " data - ga - click = " (Logged out) Header, go to Events " > Events < / a > < / li >
< li class = " edge-item-fix " > < a href = " https://github.community " class = " py-2 lh-condensed-ultra d-block link-gray no-underline f5 " data - ga - click = " (Logged out) Header, go to Community forum " > Community forum < / a > < / li >
< li class = " edge-item-fix " > < a href = " https://education.github.com " class = " py-2 pb-0 lh-condensed-ultra d-block link-gray no-underline f5 " data - ga - click = " (Logged out) Header, go to GitHub Education " > GitHub Education < / a > < / li >
< / ul >
< / div >
< / details >
< / li >
< li class = " border-bottom border-lg-bottom-0 mr-0 mr-lg-3 " >
< a href = " /marketplace " class = " HeaderMenu-link no-underline py-3 d-block d-lg-inline-block " data - ga - click = " (Logged out) Header, go to Marketplace " > Marketplace < / a >
< / li >
< li class = " d-block d-lg-flex flex-lg-nowrap flex-lg-items-center border-bottom border-lg-bottom-0 mr-0 mr-lg-3 edge-item-fix position-relative flex-wrap flex-justify-between d-flex flex-items-center " >
< details class = " HeaderMenu-details details-overlay details-reset width-full " >
< summary class = " HeaderMenu-summary HeaderMenu-link px-0 py-3 border-0 no-wrap d-block d-lg-inline-block " >
Pricing
< svg x = " 0px " y = " 0px " viewBox = " 0 0 14 8 " xml : space = " preserve " fill = " none " class = " icon-chevon-down-mktg position-absolute position-lg-relative " >
< path d = " M1,1l6.2,6L13,1 " > < / path >
< / svg >
< / summary >
< div class = " dropdown-menu flex-auto rounded-1 bg-white px-0 pt-2 pb-4 mt-0 p-lg-4 position-relative position-lg-absolute left-0 left-lg-n4 " >
< a href = " /pricing " class = " pb-2 lh-condensed-ultra d-block link-gray-dark no-underline h5 Bump-link--hover " data - ga - click = " (Logged out) Header, go to Pricing " > Plans < span class = " Bump-link-symbol float-right text-normal text-gray-light " > & rarr ; < / span > < / a >
< ul class = " list-style-none mb-3 " >
< li class = " edge-item-fix " > < a href = " /pricing#feature-comparison " class = " py-2 lh-condensed-ultra d-block link-gray no-underline f5 " data - ga - click = " (Logged out) Header, go to Compare plans " > Compare plans < / a > < / li >
< li class = " edge-item-fix " > < a href = " https://enterprise.github.com/contact " class = " py-2 lh-condensed-ultra d-block link-gray no-underline f5 " data - ga - click = " (Logged out) Header, go to Contact Sales " > Contact Sales < / a > < / li >
< / ul >
< ul class = " list-style-none mb-0 border-lg-top pt-lg-3 " >
< li class = " edge-item-fix " > < a href = " /nonprofit " class = " py-2 lh-condensed-ultra d-block no-underline link-gray-dark no-underline h5 Bump-link--hover " data - ga - click = " (Logged out) Header, go to Nonprofits " > Nonprofit < span class = " Bump-link-symbol float-right text-normal text-gray-light " > & rarr ; < / span > < / a > < / li >
< li class = " edge-item-fix " > < a href = " https://education.github.com " class = " py-2 pb-0 lh-condensed-ultra d-block no-underline link-gray-dark no-underline h5 Bump-link--hover " data - ga - click = " (Logged out) Header, go to Education " > Education < span class = " Bump-link-symbol float-right text-normal text-gray-light " > & rarr ; < / span > < / a > < / li >
< / ul >
< / div >
< / details >
< / li >
< / ul >
< / nav >
< div class = " d-lg-flex flex-items-center px-3 px-lg-0 text-center text-lg-left " >
< div class = " d-lg-flex mb-3 mb-lg-0 " >
< div class = " header-search flex-self-stretch flex-lg-self-auto mr-0 mr-lg-3 mb-3 mb-lg-0 scoped-search site-scoped-search js-site-search position-relative js-jump-to "
role = " combobox "
aria - owns = " jump-to-results "
aria - label = " Search or jump to "
aria - haspopup = " listbox "
aria - expanded = " false "
>
< div class = " position-relative " >
< ! - - ' " ` --><!-- </textarea></xmp> --></option></form><form class= " js-site-search-form " role= " search " aria-label= " Site " data-scope-type= " Repository " data-scope-id= " 45821540 " data-scoped-search-url= " /openwrt/openwrt/search " data-unscoped-search-url= " /search " action= " /openwrt/openwrt/search " accept-charset= " UTF-8 " method= " get " ><input name= " utf8 " type= " hidden " value= " ✓ " />
< label class = " form-control input-sm header-search-wrapper p-0 header-search-wrapper-jump-to position-relative d-flex flex-justify-between flex-items-center js-chromeless-input-container " >
< input type = " text "
class = " form-control input-sm header-search-input jump-to-field js-jump-to-field js-site-search-focus js-site-search-field is-clearable "
data - hotkey = " s,/ "
name = " q "
value = " "
placeholder = " Search "
data - unscoped - placeholder = " Search GitHub "
data - scoped - placeholder = " Search "
autocapitalize = " off "
aria - autocomplete = " list "
aria - controls = " jump-to-results "
aria - label = " Search "
data - jump - to - suggestions - path = " /_graphql/GetSuggestedNavigationDestinations#csrf-token=xR7n7HnDSwt+XFilcsVwfyKKj+D3i8DaaBNt6/OIwRAVh5SGdtCvTzCoIPi1aIiLQB00NAgiaF67REQ1/qF/fA== "
spellcheck = " false "
autocomplete = " off "
>
< input type = " hidden " class = " js-site-search-type-field " name = " type " >
< img src = " https://github.githubassets.com/images/search-key-slash.svg " alt = " " class = " mr-2 header-search-key-slash " >
< div class = " Box position-absolute overflow-hidden d-none jump-to-suggestions js-jump-to-suggestions-container " >
< ul class = " d-none js-jump-to-suggestions-template-container " >
< li class = " d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-suggestion " role = " option " >
< a tabindex = " -1 " class = " no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2 " href = " " >
< div class = " jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none " >
< svg height = " 16 " width = " 16 " class = " octicon octicon-repo flex-shrink-0 js-jump-to-octicon-repo d-none " title = " Repository " aria - label = " Repository " viewBox = " 0 0 12 16 " version = " 1.1 " role = " img " > < path fill - rule = " evenodd " d = " M4 9H3V8h1v1zm0-3H3v1h1V6zm0-2H3v1h1V4zm0-2H3v1h1V2zm8-1v12c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1zm-1 10H1v2h2v-1h3v1h5v-2zm0-10H2v9h9V1z " / > < / svg >
< svg height = " 16 " width = " 16 " class = " octicon octicon-project flex-shrink-0 js-jump-to-octicon-project d-none " title = " Project " aria - label = " Project " viewBox = " 0 0 15 16 " version = " 1.1 " role = " img " > < path fill - rule = " evenodd " d = " M10 12h3V2h-3v10zm-4-2h3V2H6v8zm-4 4h3V2H2v12zm-1 1h13V1H1v14zM14 0H1a1 1 0 00-1 1v14a1 1 0 001 1h13a1 1 0 001-1V1a1 1 0 00-1-1z " / > < / svg >
< svg height = " 16 " width = " 16 " class = " octicon octicon-search flex-shrink-0 js-jump-to-octicon-search d-none " title = " Search " aria - label = " Search " viewBox = " 0 0 16 16 " version = " 1.1 " role = " img " > < path fill - rule = " evenodd " d = " M15.7 13.3l-3.81-3.83A5.93 5.93 0 0013 6c0-3.31-2.69-6-6-6S1 2.69 1 6s2.69 6 6 6c1.3 0 2.48-.41 3.47-1.11l3.83 3.81c.19.2.45.3.7.3.25 0 .52-.09.7-.3a.996.996 0 000-1.41v.01zM7 10.7c-2.59 0-4.7-2.11-4.7-4.7 0-2.59 2.11-4.7 4.7-4.7 2.59 0 4.7 2.11 4.7 4.7 0 2.59-2.11 4.7-4.7 4.7z " / > < / svg >
< / div >
< img class = " avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none " alt = " " aria - label = " Team " src = " " width = " 28 " height = " 28 " >
< div class = " jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target " >
< / div >
< div class = " border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none js-jump-to-badge-search " >
< span class = " js-jump-to-badge-search-text-default d-none " aria - label = " in this repository " >
In this repository
< / span >
< span class = " js-jump-to-badge-search-text-global d-none " aria - label = " in all of GitHub " >
All GitHub
< / span >
< span aria - hidden = " true " class = " d-inline-block ml-1 v-align-middle " > ↵ < / span >
< / div >
< div aria - hidden = " true " class = " border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump " >
Jump to
< span class = " d-inline-block ml-1 v-align-middle " > ↵ < / span >
< / div >
< / a >
< / li >
< / ul >
< ul class = " d-none js-jump-to-no-results-template-container " >
< li class = " d-flex flex-justify-center flex-items-center f5 d-none js-jump-to-suggestion p-2 " >
< span class = " text-gray " > No suggested jump to results < / span >
< / li >
< / ul >
< ul id = " jump-to-results " role = " listbox " class = " p-0 m-0 js-navigation-container jump-to-suggestions-results-container js-jump-to-suggestions-results-container " >
< li class = " d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-scoped-search d-none " role = " option " >
< a tabindex = " -1 " class = " no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2 " href = " " >
< div class = " jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none " >
< svg height = " 16 " width = " 16 " class = " octicon octicon-repo flex-shrink-0 js-jump-to-octicon-repo d-none " title = " Repository " aria - label = " Repository " viewBox = " 0 0 12 16 " version = " 1.1 " role = " img " > < path fill - rule = " evenodd " d = " M4 9H3V8h1v1zm0-3H3v1h1V6zm0-2H3v1h1V4zm0-2H3v1h1V2zm8-1v12c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1zm-1 10H1v2h2v-1h3v1h5v-2zm0-10H2v9h9V1z " / > < / svg >
< svg height = " 16 " width = " 16 " class = " octicon octicon-project flex-shrink-0 js-jump-to-octicon-project d-none " title = " Project " aria - label = " Project " viewBox = " 0 0 15 16 " version = " 1.1 " role = " img " > < path fill - rule = " evenodd " d = " M10 12h3V2h-3v10zm-4-2h3V2H6v8zm-4 4h3V2H2v12zm-1 1h13V1H1v14zM14 0H1a1 1 0 00-1 1v14a1 1 0 001 1h13a1 1 0 001-1V1a1 1 0 00-1-1z " / > < / svg >
< svg height = " 16 " width = " 16 " class = " octicon octicon-search flex-shrink-0 js-jump-to-octicon-search d-none " title = " Search " aria - label = " Search " viewBox = " 0 0 16 16 " version = " 1.1 " role = " img " > < path fill - rule = " evenodd " d = " M15.7 13.3l-3.81-3.83A5.93 5.93 0 0013 6c0-3.31-2.69-6-6-6S1 2.69 1 6s2.69 6 6 6c1.3 0 2.48-.41 3.47-1.11l3.83 3.81c.19.2.45.3.7.3.25 0 .52-.09.7-.3a.996.996 0 000-1.41v.01zM7 10.7c-2.59 0-4.7-2.11-4.7-4.7 0-2.59 2.11-4.7 4.7-4.7 2.59 0 4.7 2.11 4.7 4.7 0 2.59-2.11 4.7-4.7 4.7z " / > < / svg >
< / div >
< img class = " avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none " alt = " " aria - label = " Team " src = " " width = " 28 " height = " 28 " >
< div class = " jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target " >
< / div >
< div class = " border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none js-jump-to-badge-search " >
< span class = " js-jump-to-badge-search-text-default d-none " aria - label = " in this repository " >
In this repository
< / span >
< span class = " js-jump-to-badge-search-text-global d-none " aria - label = " in all of GitHub " >
All GitHub
< / span >
< span aria - hidden = " true " class = " d-inline-block ml-1 v-align-middle " > ↵ < / span >
< / div >
< div aria - hidden = " true " class = " border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump " >
Jump to
< span class = " d-inline-block ml-1 v-align-middle " > ↵ < / span >
< / div >
< / a >
< / li >
< li class = " d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-global-search d-none " role = " option " >
< a tabindex = " -1 " class = " no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2 " href = " " >
< div class = " jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none " >
< svg height = " 16 " width = " 16 " class = " octicon octicon-repo flex-shrink-0 js-jump-to-octicon-repo d-none " title = " Repository " aria - label = " Repository " viewBox = " 0 0 12 16 " version = " 1.1 " role = " img " > < path fill - rule = " evenodd " d = " M4 9H3V8h1v1zm0-3H3v1h1V6zm0-2H3v1h1V4zm0-2H3v1h1V2zm8-1v12c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1zm-1 10H1v2h2v-1h3v1h5v-2zm0-10H2v9h9V1z " / > < / svg >
< svg height = " 16 " width = " 16 " class = " octicon octicon-project flex-shrink-0 js-jump-to-octicon-project d-none " title = " Project " aria - label = " Project " viewBox = " 0 0 15 16 " version = " 1.1 " role = " img " > < path fill - rule = " evenodd " d = " M10 12h3V2h-3v10zm-4-2h3V2H6v8zm-4 4h3V2H2v12zm-1 1h13V1H1v14zM14 0H1a1 1 0 00-1 1v14a1 1 0 001 1h13a1 1 0 001-1V1a1 1 0 00-1-1z " / > < / svg >
< svg height = " 16 " width = " 16 " class = " octicon octicon-search flex-shrink-0 js-jump-to-octicon-search d-none " title = " Search " aria - label = " Search " viewBox = " 0 0 16 16 " version = " 1.1 " role = " img " > < path fill - rule = " evenodd " d = " M15.7 13.3l-3.81-3.83A5.93 5.93 0 0013 6c0-3.31-2.69-6-6-6S1 2.69 1 6s2.69 6 6 6c1.3 0 2.48-.41 3.47-1.11l3.83 3.81c.19.2.45.3.7.3.25 0 .52-.09.7-.3a.996.996 0 000-1.41v.01zM7 10.7c-2.59 0-4.7-2.11-4.7-4.7 0-2.59 2.11-4.7 4.7-4.7 2.59 0 4.7 2.11 4.7 4.7 0 2.59-2.11 4.7-4.7 4.7z " / > < / svg >
< / div >
< img class = " avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none " alt = " " aria - label = " Team " src = " " width = " 28 " height = " 28 " >
< div class = " jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target " >
< / div >
< div class = " border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none js-jump-to-badge-search " >
< span class = " js-jump-to-badge-search-text-default d-none " aria - label = " in this repository " >
In this repository
< / span >
< span class = " js-jump-to-badge-search-text-global d-none " aria - label = " in all of GitHub " >
All GitHub
< / span >
< span aria - hidden = " true " class = " d-inline-block ml-1 v-align-middle " > ↵ < / span >
< / div >
< div aria - hidden = " true " class = " border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump " >
Jump to
< span class = " d-inline-block ml-1 v-align-middle " > ↵ < / span >
< / div >
< / a >
< / li >
< / ul >
< / div >
< / label >
< / form > < / div >
< / div >
< / div >
< a href = " /login?return_to= %2F openwrt %2F openwrt %2F blob %2F master %2F scripts %2F json_add_image_info.py "
class = " HeaderMenu-link no-underline mr-3 "
data - hydro - click = " { "event_type":"authentication.click","payload": { "location_in_page":"site header menu","repository_id":null,"auth_type":"SIGN_UP","client_id":null,"originating_request_id":"CE8B:322B:EBD1C4:156E56F:5DAC4D0A","originating_url":"https://github.com/openwrt/openwrt/blob/master/scripts/json_add_image_info.py","referrer":null,"user_id":null}} " data - hydro - click - hmac = " 360baf2ff288cc760d0d8226c04f0e38800e6bf2a94cf089ef5cb6d5cc247ef5 "
data - ga - click = " (Logged out) Header, clicked Sign in, text:sign-in " >
Sign & nbsp ; in
< / a >
< a href = " /join?source=header-repo&source_repo=openwrt %2F openwrt "
class = " HeaderMenu-link d-inline-block no-underline border border-gray-dark rounded-1 px-2 py-1 "
data - hydro - click = " { "event_type":"authentication.click","payload": { "location_in_page":"site header menu","repository_id":null,"auth_type":"SIGN_UP","client_id":null,"originating_request_id":"CE8B:322B:EBD1C4:156E56F:5DAC4D0A","originating_url":"https://github.com/openwrt/openwrt/blob/master/scripts/json_add_image_info.py","referrer":null,"user_id":null}} " data - hydro - click - hmac = " 360baf2ff288cc760d0d8226c04f0e38800e6bf2a94cf089ef5cb6d5cc247ef5 "
data - ga - click = " (Logged out) Header, clicked Sign up, text:sign-up " >
Sign & nbsp ; up
< / a >
< / div >
< / div >
< / div >
< / header >
< / div >
< div id = " start-of-content " class = " show-on-focus " > < / div >
< div id = " js-flash-container " >
< / div >
< div class = " application-main " data - commit - hovercards - enabled >
< div itemscope itemtype = " http://schema.org/SoftwareSourceCode " class = " " >
< main >
< div class = " pagehead repohead instapaper_ignore readability-menu experiment-repo-nav pt-0 pt-lg-4 " >
< div class = " repohead-details-container clearfix container-lg p-responsive d-none d-lg-block " >
< ul class = " pagehead-actions " >
< li >
< a class = " tooltipped tooltipped-s btn btn-sm btn-with-count " aria - label = " You must be signed in to watch a repository " rel = " nofollow " data - hydro - click = " { "event_type":"authentication.click","payload": { "location_in_page":"notification subscription menu watch","repository_id":null,"auth_type":"LOG_IN","client_id":null,"originating_request_id":"CE8B:322B:EBD1C4:156E56F:5DAC4D0A","originating_url":"https://github.com/openwrt/openwrt/blob/master/scripts/json_add_image_info.py","referrer":null,"user_id":null}} " data - hydro - click - hmac = " c1a08521d5cebb22bd1ec2fc7aece3244650ae7a7166236a65a4dc14e099c567 " href = " /login?return_to= %2F openwrt %2F openwrt " >
< svg class = " octicon octicon-eye v-align-text-bottom " viewBox = " 0 0 16 16 " version = " 1.1 " width = " 16 " height = " 16 " aria - hidden = " true " > < path fill - rule = " evenodd " d = " M8.06 2C3 2 0 8 0 8s3 6 8.06 6C13 14 16 8 16 8s-3-6-7.94-6zM8 12c-2.2 0-4-1.78-4-4 0-2.2 1.8-4 4-4 2.22 0 4 1.8 4 4 0 2.22-1.78 4-4 4zm2-4c0 1.11-.89 2-2 2-1.11 0-2-.89-2-2 0-1.11.89-2 2-2 1.11 0 2 .89 2 2z " / > < / svg >
Watch
< / a > < a class = " social-count " href = " /openwrt/openwrt/watchers "
aria - label = " 419 users are watching this repository " >
419
< / a >
< / li >
< li >
< a class = " btn btn-sm btn-with-count tooltipped tooltipped-s " aria - label = " You must be signed in to star a repository " rel = " nofollow " data - hydro - click = " { "event_type":"authentication.click","payload": { "location_in_page":"star button","repository_id":45821540,"auth_type":"LOG_IN","client_id":null,"originating_request_id":"CE8B:322B:EBD1C4:156E56F:5DAC4D0A","originating_url":"https://github.com/openwrt/openwrt/blob/master/scripts/json_add_image_info.py","referrer":null,"user_id":null}} " data - hydro - click - hmac = " 11f8c4fdca8681d67f9b2899ace6256908b143720eeb8164c338eb4065b96865 " href = " /login?return_to= %2F openwrt %2F openwrt " >
< svg class = " octicon octicon-star v-align-text-bottom " viewBox = " 0 0 14 16 " version = " 1.1 " width = " 14 " height = " 16 " aria - hidden = " true " > < path fill - rule = " evenodd " d = " M14 6l-4.9-.64L7 1 4.9 5.36 0 6l3.6 3.26L2.67 14 7 11.67 11.33 14l-.93-4.74L14 6z " / > < / svg >
Star
< / a >
< a class = " social-count js-social-count " href = " /openwrt/openwrt/stargazers "
aria - label = " 4700 users starred this repository " >
4 , 700
< / a >
< / li >
< li >
< a class = " btn btn-sm btn-with-count tooltipped tooltipped-s " aria - label = " You must be signed in to fork a repository " rel = " nofollow " data - hydro - click = " { "event_type":"authentication.click","payload": { "location_in_page":"repo details fork button","repository_id":45821540,"auth_type":"LOG_IN","client_id":null,"originating_request_id":"CE8B:322B:EBD1C4:156E56F:5DAC4D0A","originating_url":"https://github.com/openwrt/openwrt/blob/master/scripts/json_add_image_info.py","referrer":null,"user_id":null}} " data - hydro - click - hmac = " 0bb3cf7f66afbc4d98df595aa6f1d5643cb828d28ff3dc9b324ba50dd2cd85fd " href = " /login?return_to= %2F openwrt %2F openwrt " >
< svg class = " octicon octicon-repo-forked v-align-text-bottom " viewBox = " 0 0 10 16 " version = " 1.1 " width = " 10 " height = " 16 " aria - hidden = " true " > < path fill - rule = " evenodd " d = " M8 1a1.993 1.993 0 00-1 3.72V6L5 8 3 6V4.72A1.993 1.993 0 002 1a1.993 1.993 0 00-1 3.72V6.5l3 3v1.78A1.993 1.993 0 005 15a1.993 1.993 0 001-3.72V9.5l3-3V4.72A1.993 1.993 0 008 1zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3 10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3-10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z " / > < / svg >
Fork
< / a >
< a href = " /openwrt/openwrt/network/members " class = " social-count "
aria - label = " 2842 users forked this repository " >
2 , 842
< / a >
< / li >
< / ul >
< h1 class = " public " >
< svg class = " octicon octicon-repo " viewBox = " 0 0 12 16 " version = " 1.1 " width = " 12 " height = " 16 " aria - hidden = " true " > < path fill - rule = " evenodd " d = " M4 9H3V8h1v1zm0-3H3v1h1V6zm0-2H3v1h1V4zm0-2H3v1h1V2zm8-1v12c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1zm-1 10H1v2h2v-1h3v1h5v-2zm0-10H2v9h9V1z " / > < / svg >
< span class = " author " itemprop = " author " > < a class = " url fn " rel = " author " data - hovercard - type = " organization " data - hovercard - url = " /orgs/openwrt/hovercard " href = " /openwrt " > openwrt < / a > < / span > < ! - -
- - > < span class = " path-divider " > / < / span > < ! - -
- - > < strong itemprop = " name " > < a data - pjax = " #js-repo-pjax-container " href = " /openwrt/openwrt " > openwrt < / a > < / strong >
< / h1 >
< / div >
< nav class = " hx_reponav reponav js-repo-nav js-sidenav-container-pjax container-lg p-responsive d-none d-lg-block "
itemscope
itemtype = " http://schema.org/BreadcrumbList "
aria - label = " Repository "
data - pjax = " #js-repo-pjax-container " >
< span itemscope itemtype = " http://schema.org/ListItem " itemprop = " itemListElement " >
< a class = " js-selected-navigation-item selected reponav-item " itemprop = " url " data - hotkey = " g c " aria - current = " page " data - selected - links = " repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages /openwrt/openwrt " href = " /openwrt/openwrt " >
< svg class = " octicon octicon-code " viewBox = " 0 0 14 16 " version = " 1.1 " width = " 14 " height = " 16 " aria - hidden = " true " > < path fill - rule = " evenodd " d = " M9.5 3L8 4.5 11.5 8 8 11.5 9.5 13 14 8 9.5 3zm-5 0L0 8l4.5 5L6 11.5 2.5 8 6 4.5 4.5 3z " / > < / svg >
< span itemprop = " name " > Code < / span >
< meta itemprop = " position " content = " 1 " >
< / a > < / span >
< span itemscope itemtype = " http://schema.org/ListItem " itemprop = " itemListElement " >
< a data - hotkey = " g p " itemprop = " url " class = " js-selected-navigation-item reponav-item " data - selected - links = " repo_pulls checks /openwrt/openwrt/pulls " href = " /openwrt/openwrt/pulls " >
< svg class = " octicon octicon-git-pull-request " viewBox = " 0 0 12 16 " version = " 1.1 " width = " 12 " height = " 16 " aria - hidden = " true " > < path fill - rule = " evenodd " d = " M11 11.28V5c-.03-.78-.34-1.47-.94-2.06C9.46 2.35 8.78 2.03 8 2H7V0L4 3l3 3V4h1c.27.02.48.11.69.31.21.2.3.42.31.69v6.28A1.993 1.993 0 0010 15a1.993 1.993 0 001-3.72zm-1 2.92c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zM4 3c0-1.11-.89-2-2-2a1.993 1.993 0 00-1 3.72v6.56A1.993 1.993 0 002 15a1.993 1.993 0 001-3.72V4.72c.59-.34 1-.98 1-1.72zm-.8 10c0 .66-.55 1.2-1.2 1.2-.65 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z " / > < / svg >
< span itemprop = " name " > Pull requests < / span >
< span class = " Counter " > 163 < / span >
< meta itemprop = " position " content = " 3 " >
< / a > < / span >
< a data - hotkey = " g b " class = " js-selected-navigation-item reponav-item " data - selected - links = " repo_projects new_repo_project repo_project /openwrt/openwrt/projects " href = " /openwrt/openwrt/projects " >
< svg class = " octicon octicon-project " viewBox = " 0 0 15 16 " version = " 1.1 " width = " 15 " height = " 16 " aria - hidden = " true " > < path fill - rule = " evenodd " d = " M10 12h3V2h-3v10zm-4-2h3V2H6v8zm-4 4h3V2H2v12zm-1 1h13V1H1v14zM14 0H1a1 1 0 00-1 1v14a1 1 0 001 1h13a1 1 0 001-1V1a1 1 0 00-1-1z " / > < / svg >
Projects
< span class = " Counter " > 0 < / span >
< / a >
< a data - skip - pjax = " true " class = " js-selected-navigation-item reponav-item " data - selected - links = " security alerts policy code_scanning /openwrt/openwrt/security/advisories " href = " /openwrt/openwrt/security/advisories " >
< svg class = " octicon octicon-shield " viewBox = " 0 0 14 16 " version = " 1.1 " width = " 14 " height = " 16 " aria - hidden = " true " > < path fill - rule = " evenodd " d = " M0 2l7-2 7 2v6.02C14 12.69 8.69 16 7 16c-1.69 0-7-3.31-7-7.98V2zm1 .75L7 1l6 1.75v5.268C13 12.104 8.449 15 7 15c-1.449 0-6-2.896-6-6.982V2.75zm1 .75L7 2v12c-1.207 0-5-2.482-5-5.985V3.5z " / > < / svg >
Security
< / a >
< a class = " js-selected-navigation-item reponav-item " data - selected - links = " repo_graphs repo_contributors dependency_graph pulse people /openwrt/openwrt/pulse " href = " /openwrt/openwrt/pulse " >
< svg class = " octicon octicon-graph " viewBox = " 0 0 16 16 " version = " 1.1 " width = " 16 " height = " 16 " aria - hidden = " true " > < path fill - rule = " evenodd " d = " M16 14v1H0V0h1v14h15zM5 13H3V8h2v5zm4 0H7V3h2v10zm4 0h-2V6h2v7z " / > < / svg >
Insights
< / a >
< / nav >
< div class = " reponav-wrapper reponav-small d-lg-none " >
< nav class = " reponav js-reponav text-center no-wrap "
itemscope
itemtype = " http://schema.org/BreadcrumbList " >
< span itemscope itemtype = " http://schema.org/ListItem " itemprop = " itemListElement " >
< a class = " js-selected-navigation-item selected reponav-item " itemprop = " url " aria - current = " page " data - selected - links = " repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages /openwrt/openwrt " href = " /openwrt/openwrt " >
< span itemprop = " name " > Code < / span >
< meta itemprop = " position " content = " 1 " >
< / a > < / span >
< span itemscope itemtype = " http://schema.org/ListItem " itemprop = " itemListElement " >
< a itemprop = " url " class = " js-selected-navigation-item reponav-item " data - selected - links = " repo_pulls checks /openwrt/openwrt/pulls " href = " /openwrt/openwrt/pulls " >
< span itemprop = " name " > Pull requests < / span >
< span class = " Counter " > 163 < / span >
< meta itemprop = " position " content = " 3 " >
< / a > < / span >
< span itemscope itemtype = " http://schema.org/ListItem " itemprop = " itemListElement " >
< a itemprop = " url " class = " js-selected-navigation-item reponav-item " data - selected - links = " repo_projects new_repo_project repo_project /openwrt/openwrt/projects " href = " /openwrt/openwrt/projects " >
< span itemprop = " name " > Projects < / span >
< span class = " Counter " > 0 < / span >
< meta itemprop = " position " content = " 4 " >
< / a > < / span >
< a itemprop = " url " class = " js-selected-navigation-item reponav-item " data - selected - links = " security alerts policy code_scanning /openwrt/openwrt/security/advisories " href = " /openwrt/openwrt/security/advisories " >
< span itemprop = " name " > Security < / span >
< meta itemprop = " position " content = " 6 " >
< / a >
< a class = " js-selected-navigation-item reponav-item " data - selected - links = " pulse /openwrt/openwrt/pulse " href = " /openwrt/openwrt/pulse " >
Pulse
< / a >
< / nav >
< / div >
< / div >
< div class = " container-lg clearfix new-discussion-timeline experiment-repo-nav p-responsive " >
< div class = " repository-content " >
< a class = " d-none js-permalink-shortcut " data - hotkey = " y " href = " /openwrt/openwrt/blob/9ba5cd86b89f5f51cbad536c051dca61a9bfe8e5/scripts/json_add_image_info.py " > Permalink < / a >
< ! - - blob contrib key : blob_contributors : v21 : 309 c18fa25578125cb7791a9984dda11 - - >
< div class = " signup-prompt-bg rounded-1 " >
< div class = " signup-prompt p-4 text-center mb-4 rounded-1 " >
< div class = " position-relative " >
< ! - - ' " ` --><!-- </textarea></xmp> --></option></form><form action= " /prompt_dismissals/signup " accept-charset= " UTF-8 " method= " post " ><input name= " utf8 " type= " hidden " value= " ✓ " /><input type= " hidden " name= " _method " value= " put " /><input type= " hidden " name= " authenticity_token " value= " OQEyv+7WF0lgRXUvJH0TG2DL7PrEbreDBkEfCCGZxBUcw4PdqYnL3MLb6SOA2PbfULW6o0yu7XnUY2xfFhGRyg== " />
< button type = " submit " class = " position-absolute top-0 right-0 btn-link link-gray " data - ga - click = " (Logged out) Sign up prompt, clicked Dismiss, text:dismiss " >
Dismiss
< / button >
< / form > < h3 class = " pt-2 " > Join GitHub today < / h3 >
< p class = " col-6 mx-auto " > GitHub is home to over 40 million developers working together to host and review code , manage projects , and build software together . < / p >
< a class = " btn btn-primary " data - hydro - click = " { "event_type":"authentication.click","payload": { "location_in_page":"files signup prompt","repository_id":null,"auth_type":"SIGN_UP","client_id":null,"originating_request_id":"CE8B:322B:EBD1C4:156E56F:5DAC4D0A","originating_url":"https://github.com/openwrt/openwrt/blob/master/scripts/json_add_image_info.py","referrer":null,"user_id":null}} " data - hydro - click - hmac = " 80412c40d76806b42ece49ba5f7a0d6c3fc7654e5731360e66d2e5c33e2fb122 " data - ga - click = " (Logged out) Sign up prompt, clicked Sign up, text:sign-up " href = " /join?source=prompt-blob-show&source_repo=openwrt %2F openwrt " > Sign up < / a >
< / div >
< / div >
< / div >
< div class = " d-flex flex-items-start flex-shrink-0 pb-3 flex-column flex-md-row " >
< span class = " d-flex flex-justify-between width-full width-md-auto " >
< details class = " details-reset details-overlay select-menu branch-select-menu hx_rsm " id = " branch-select-menu " >
< summary class = " btn btn-sm select-menu-button css-truncate "
data - hotkey = " w "
title = " Switch branches or tags " >
< i > Branch : < / i >
< span class = " css-truncate-target " data - menu - button > master < / span >
< / summary >
< details - menu class = " select-menu-modal hx_rsm-modal position-absolute " style = " z-index: 99; " src = " /openwrt/openwrt/ref-list/master/scripts/json_add_image_info.py?source_action=show&source_controller=blob " preload >
< include - fragment class = " select-menu-loading-overlay anim-pulse " >
< svg height = " 32 " class = " octicon octicon-octoface " viewBox = " 0 0 16 16 " version = " 1.1 " width = " 32 " aria - hidden = " true " > < path fill - rule = " evenodd " d = " M14.7 5.34c.13-.32.55-1.59-.13-3.31 0 0-1.05-.33-3.44 1.3-1-.28-2.07-.32-3.13-.32s-2.13.04-3.13.32c-2.39-1.64-3.44-1.3-3.44-1.3-.68 1.72-.26 2.99-.13 3.31C.49 6.21 0 7.33 0 8.69 0 13.84 3.33 15 7.98 15S16 13.84 16 8.69c0-1.36-.49-2.48-1.3-3.35zM8 14.02c-3.3 0-5.98-.15-5.98-3.35 0-.76.38-1.48 1.02-2.07 1.07-.98 2.9-.46 4.96-.46 2.07 0 3.88-.52 4.96.46.65.59 1.02 1.3 1.02 2.07 0 3.19-2.68 3.35-5.98 3.35zM5.49 9.01c-.66 0-1.2.8-1.2 1.78s.54 1.79 1.2 1.79c.66 0 1.2-.8 1.2-1.79s-.54-1.78-1.2-1.78zm5.02 0c-.66 0-1.2.79-1.2 1.78s.54 1.79 1.2 1.79c.66 0 1.2-.8 1.2-1.79s-.53-1.78-1.2-1.78z " / > < / svg >
< / include - fragment >
< / details - menu >
< / details >
< div class = " BtnGroup flex-shrink-0 d-md-none " >
< a href = " /openwrt/openwrt/find/master "
class = " js-pjax-capture-input btn btn-sm BtnGroup-item "
data - pjax
data - hotkey = " t " >
Find file
< / a >
< clipboard - copy value = " scripts/json_add_image_info.py " class = " btn btn-sm BtnGroup-item " >
Copy path
< / clipboard - copy >
< / div >
< / span >
< h2 id = " blob-path " class = " breadcrumb flex-auto min-width-0 text-normal flex-md-self-center ml-md-2 mr-md-3 my-2 my-md-0 " >
< span class = " js-repo-root text-bold " > < span class = " js-path-segment " > < a data - pjax = " true " href = " /openwrt/openwrt " > < span > openwrt < / span > < / a > < / span > < / span > < span class = " separator " > / < / span > < span class = " js-path-segment " > < a data - pjax = " true " href = " /openwrt/openwrt/tree/master/scripts " > < span > scripts < / span > < / a > < / span > < span class = " separator " > / < / span > < strong class = " final-path " > json_add_image_info . py < / strong >
< / h2 >
< div class = " BtnGroup flex-shrink-0 d-none d-md-inline-block " >
< a href = " /openwrt/openwrt/find/master "
class = " js-pjax-capture-input btn btn-sm BtnGroup-item "
data - pjax
data - hotkey = " t " >
Find file
< / a >
< clipboard - copy value = " scripts/json_add_image_info.py " class = " btn btn-sm BtnGroup-item " >
Copy path
< / clipboard - copy >
< / div >
< / div >
< div class = " Box Box--condensed d-flex flex-column flex-shrink-0 " >
< div class = " Box-body d-flex flex-justify-between bg-blue-light flex-column flex-md-row flex-items-start flex-md-items-center " >
< span class = " pr-md-4 f6 " >
< a rel = " contributor " data - skip - pjax = " true " data - hovercard - type = " user " data - hovercard - url = " /hovercards?user_id=16000931 " data - octo - click = " hovercard-link-click " data - octo - dimensions = " link_type:self " href = " /aparcar " > < img class = " avatar " src = " https://avatars0.githubusercontent.com/u/16000931?s=40&v=4 " width = " 20 " height = " 20 " alt = " @aparcar " / > < / a >
< a class = " text-bold link-gray-dark lh-default v-align-middle " rel = " contributor " data - hovercard - type = " user " data - hovercard - url = " /hovercards?user_id=16000931 " data - octo - click = " hovercard-link-click " data - octo - dimensions = " link_type:self " href = " /aparcar " > aparcar < / a >
< span class = " lh-default v-align-middle " >
< a data - pjax = " true " title = " build: create JSON files containing image info
The JSON info files contain details about the created firmware images
per device and are stored next to the created images .
The JSON files are stored as & quot ; $ ( IMAGE_PREFIX ) . json & quot ; and contain some
device / image meta data as well as a list of created firmware images .
An example of openwrt - ramips - rt305x - aztech_hw550 - 3 g . json
{
& quot ; id & quot ; : & quot ; aztech_hw550 - 3 g & quot ; ,
& quot ; image_prefix & quot ; : & quot ; openwrt - ramips - rt305x - aztech_hw550 - 3 g & quot ; ,
& quot ; images & quot ; : [
{
& quot ; name & quot ; : & quot ; openwrt - ramips - rt305x - aztech_hw550 - 3 g - squashfs - sysupgrade . bin & quot ; ,
& quot ; sha256 & quot ; : & quot ; db2b34b0ec4a83d9bf612cf66fab0dc3722b191cb9bedf111e5627a4298baf20 & quot ; ,
& quot ; type & quot ; : & quot ; sysupgrade & quot ;
}
] ,
& quot ; metadata_version & quot ; : 1 ,
& quot ; supported_devices & quot ; : [
& quot ; aztech , hw550 - 3 g & quot ; ,
& quot ; hw550 - 3 g & quot ;
] ,
& quot ; target & quot ; : & quot ; ramips / rt305x & quot ; ,
& quot ; titles & quot ; : [
{
& quot ; model & quot ; : & quot ; HW550 - 3 G & quot ; ,
& quot ; vendor & quot ; : & quot ; Aztech & quot ;
} ,
{
& quot ; model & quot ; : & quot ; ALL0239 - 3 G & quot ; ,
& quot ; vendor & quot ; : & quot ; Allnet & quot ;
}
] ,
& quot ; version_commit & quot ; : & quot ; r10920 + 123 - 0 cc87b3bac & quot ; ,
& quot ; version_number & quot ; : & quot ; SNAPSHOT & quot ;
2019-10-20 12:03:52 +00:00
}
2020-02-03 04:33:25 +00:00
Signed - off - by : Paul Spooren & lt ; mail @aparcar.org & gt ; " class= " link - gray " href= " / openwrt / openwrt / commit / 881 ed09ee6e23f6c224184bb7493253c4624fb9f " >build: create JSON files containing image info</a>
< / span >
< / span >
< span class = " d-inline-block flex-shrink-0 v-align-bottom f6 mt-2 mt-md-0 " >
< a class = " pr-2 text-mono link-gray " href = " /openwrt/openwrt/commit/881ed09ee6e23f6c224184bb7493253c4624fb9f " data - pjax > 881 ed09 < / a >
< relative - time datetime = " 2019-09-29T11:51:28Z " class = " no-wrap " > Sep 29 , 2019 < / relative - time >
< / span >
< / div >
< div class = " Box-body d-flex flex-items-center flex-auto f6 border-bottom-0 flex-wrap " >
< details class = " details-reset details-overlay details-overlay-dark lh-default text-gray-dark float-left mr-2 " id = " blob_contributors_box " >
< summary class = " btn-link " >
< span > < strong > 1 < / strong > contributor < / span >
< / summary >
< details - dialog
class = " Box Box--overlay d-flex flex-column anim-fade-in fast "
aria - label = " Users who have contributed to this file "
src = " /openwrt/openwrt/contributors/master/scripts/json_add_image_info.py/list " preload >
< div class = " Box-header " >
< button class = " Box-btn-octicon btn-octicon float-right " type = " button " aria - label = " Close dialog " data - close - dialog >
< svg class = " octicon octicon-x " viewBox = " 0 0 12 16 " version = " 1.1 " width = " 12 " height = " 16 " aria - hidden = " true " > < path fill - rule = " evenodd " d = " M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48L7.48 8z " / > < / svg >
< / button >
< h3 class = " Box-title " >
Users who have contributed to this file
< / h3 >
< / div >
< include - fragment class = " octocat-spinner my-3 " aria - label = " Loading... " > < / include - fragment >
< / details - dialog >
< / details >
< / div >
< / div >
< div class = " Box mt-3 position-relative " >
< div class = " Box-header py-2 d-flex flex-column flex-shrink-0 flex-md-row flex-md-items-center " >
< div class = " text-mono f6 flex-auto pr-3 flex-order-2 flex-md-order-1 mt-2 mt-md-0 " >
< span class = " file-mode " title = " File mode " > executable file < / span >
< span class = " file-info-divider " > < / span >
56 lines ( 40 sloc )
< span class = " file-info-divider " > < / span >
1.53 KB
< / div >
< div class = " d-flex py-1 py-md-0 flex-auto flex-order-1 flex-md-order-2 flex-sm-grow-0 flex-justify-between " >
< div class = " BtnGroup " >
< a id = " raw-url " class = " btn btn-sm BtnGroup-item " href = " /openwrt/openwrt/raw/master/scripts/json_add_image_info.py " > Raw < / a >
< a class = " btn btn-sm js-update-url-with-hash BtnGroup-item " data - hotkey = " b " href = " /openwrt/openwrt/blame/master/scripts/json_add_image_info.py " > Blame < / a >
< a rel = " nofollow " class = " btn btn-sm BtnGroup-item " href = " /openwrt/openwrt/commits/master/scripts/json_add_image_info.py " > History < / a >
< / div >
< div >
< button type = " button " class = " btn-octicon disabled tooltipped tooltipped-nw "
aria - label = " You must be signed in to make or propose changes " >
< svg class = " octicon octicon-pencil " viewBox = " 0 0 14 16 " version = " 1.1 " width = " 14 " height = " 16 " aria - hidden = " true " > < path fill - rule = " evenodd " d = " M0 12v3h3l8-8-3-3-8 8zm3 2H1v-2h1v1h1v1zm10.3-9.3L12 6 9 3l1.3-1.3a.996.996 0 011.41 0l1.59 1.59c.39.39.39 1.02 0 1.41z " / > < / svg >
< / button >
< button type = " button " class = " btn-octicon btn-octicon-danger disabled tooltipped tooltipped-nw "
aria - label = " You must be signed in to make or propose changes " >
< svg class = " octicon octicon-trashcan " viewBox = " 0 0 12 16 " version = " 1.1 " width = " 12 " height = " 16 " aria - hidden = " true " > < path fill - rule = " evenodd " d = " M11 2H9c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1H2c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1v9c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V5c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm-1 12H3V5h1v8h1V5h1v8h1V5h1v8h1V5h1v9zm1-10H2V3h9v1z " / > < / svg >
< / button >
< / div >
< / div >
< / div >
< div itemprop = " text " class = " Box-body p-0 blob-wrapper data type-python " >
< table class = " highlight tab-size js-file-line-container " data - tab - size = " 8 " >
< tr >
< td id = " L1 " class = " blob-num js-line-number " data - line - number = " 1 " > < / td >
< td id = " LC1 " class = " blob-code blob-code-inner js-file-line " > < span class = " pl-c " > < span class = " pl-c " > #</span>!/usr/bin/env python3</span></td>
< / tr >
< tr >
< td id = " L2 " class = " blob-num js-line-number " data - line - number = " 2 " > < / td >
< td id = " LC2 " class = " blob-code blob-code-inner js-file-line " >
< / td >
< / tr >
< tr >
< td id = " L3 " class = " blob-num js-line-number " data - line - number = " 3 " > < / td >
< td id = " LC3 " class = " blob-code blob-code-inner js-file-line " > < span class = " pl-k " > import < / span > json < / td >
< / tr >
< tr >
< td id = " L4 " class = " blob-num js-line-number " data - line - number = " 4 " > < / td >
< td id = " LC4 " class = " blob-code blob-code-inner js-file-line " > < span class = " pl-k " > import < / span > os < / td >
< / tr >
< tr >
< td id = " L5 " class = " blob-num js-line-number " data - line - number = " 5 " > < / td >
< td id = " LC5 " class = " blob-code blob-code-inner js-file-line " > < span class = " pl-k " > import < / span > hashlib < / td >
< / tr >
< tr >
< td id = " L6 " class = " blob-num js-line-number " data - line - number = " 6 " > < / td >
< td id = " LC6 " class = " blob-code blob-code-inner js-file-line " >
< / td >
< / tr >
< tr >
< td id = " L7 " class = " blob-num js-line-number " data - line - number = " 7 " > < / td >
< td id = " LC7 " class = " blob-code blob-code-inner js-file-line " >
< / td >
< / tr >
< tr >
< td id = " L8 " class = " blob-num js-line-number " data - line - number = " 8 " > < / td >
< td id = " LC8 " class = " blob-code blob-code-inner js-file-line " > < span class = " pl-k " > def < / span > < span class = " pl-en " > e < / span > ( < span class = " pl-smi " > variable < / span > , < span class = " pl-smi " > default < / span > < span class = " pl-k " > = < / span > < span class = " pl-c1 " > None < / span > ) : < / td >
< / tr >
< tr >
< td id = " L9 " class = " blob-num js-line-number " data - line - number = " 9 " > < / td >
< td id = " LC9 " class = " blob-code blob-code-inner js-file-line " > < span class = " pl-k " > return < / span > os . environ . get ( variable , default ) < / td >
< / tr >
< tr >
< td id = " L10 " class = " blob-num js-line-number " data - line - number = " 10 " > < / td >
< td id = " LC10 " class = " blob-code blob-code-inner js-file-line " >
< / td >
< / tr >
< tr >
< td id = " L11 " class = " blob-num js-line-number " data - line - number = " 11 " > < / td >
< td id = " LC11 " class = " blob-code blob-code-inner js-file-line " >
< / td >
< / tr >
< tr >
< td id = " L12 " class = " blob-num js-line-number " data - line - number = " 12 " > < / td >
< td id = " LC12 " class = " blob-code blob-code-inner js-file-line " > json_path < span class = " pl-k " > = < / span > < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > < span class = " pl-c1 " > { } { } { } < / span > . json < span class = " pl-pds " > & quot ; < / span > < / span > . format ( e ( < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > BIN_DIR < span class = " pl-pds " > & quot ; < / span > < / span > ) , os . sep , e ( < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > IMAGE_PREFIX < span class = " pl-pds " > & quot ; < / span > < / span > ) ) < / td >
< / tr >
< tr >
< td id = " L13 " class = " blob-num js-line-number " data - line - number = " 13 " > < / td >
< td id = " LC13 " class = " blob-code blob-code-inner js-file-line " >
< / td >
< / tr >
< tr >
< td id = " L14 " class = " blob-num js-line-number " data - line - number = " 14 " > < / td >
< td id = " LC14 " class = " blob-code blob-code-inner js-file-line " > < span class = " pl-k " > with < / span > < span class = " pl-c1 " > open < / span > ( os . path . join ( e ( < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > BIN_DIR < span class = " pl-pds " > & quot ; < / span > < / span > ) , e ( < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > IMAGE_NAME < span class = " pl-pds " > & quot ; < / span > < / span > ) ) , < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > rb < span class = " pl-pds " > & quot ; < / span > < / span > ) < span class = " pl-k " > as < / span > image_file : < / td >
< / tr >
< tr >
< td id = " L15 " class = " blob-num js-line-number " data - line - number = " 15 " > < / td >
< td id = " LC15 " class = " blob-code blob-code-inner js-file-line " > image_hash < span class = " pl-k " > = < / span > hashlib . sha256 ( image_file . read ( ) ) . hexdigest ( ) < / td >
< / tr >
< tr >
< td id = " L16 " class = " blob-num js-line-number " data - line - number = " 16 " > < / td >
< td id = " LC16 " class = " blob-code blob-code-inner js-file-line " >
< / td >
< / tr >
< tr >
< td id = " L17 " class = " blob-num js-line-number " data - line - number = " 17 " > < / td >
< td id = " LC17 " class = " blob-code blob-code-inner js-file-line " >
< / td >
< / tr >
< tr >
< td id = " L18 " class = " blob-num js-line-number " data - line - number = " 18 " > < / td >
< td id = " LC18 " class = " blob-code blob-code-inner js-file-line " > < span class = " pl-k " > def < / span > < span class = " pl-en " > get_titles < / span > ( ) : < / td >
< / tr >
< tr >
< td id = " L19 " class = " blob-num js-line-number " data - line - number = " 19 " > < / td >
< td id = " LC19 " class = " blob-code blob-code-inner js-file-line " > titles < span class = " pl-k " > = < / span > [ ] < / td >
< / tr >
< tr >
< td id = " L20 " class = " blob-num js-line-number " data - line - number = " 20 " > < / td >
< td id = " LC20 " class = " blob-code blob-code-inner js-file-line " > < span class = " pl-k " > for < / span > prefix < span class = " pl-k " > in < / span > [ < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > < span class = " pl-pds " > & quot ; < / span > < / span > , < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > ALT0_ < span class = " pl-pds " > & quot ; < / span > < / span > , < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > ALT1_ < span class = " pl-pds " > & quot ; < / span > < / span > , < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > ALT2_ < span class = " pl-pds " > & quot ; < / span > < / span > ] : < / td >
< / tr >
< tr >
< td id = " L21 " class = " blob-num js-line-number " data - line - number = " 21 " > < / td >
< td id = " LC21 " class = " blob-code blob-code-inner js-file-line " > title < span class = " pl-k " > = < / span > { } < / td >
< / tr >
< tr >
< td id = " L22 " class = " blob-num js-line-number " data - line - number = " 22 " > < / td >
< td id = " LC22 " class = " blob-code blob-code-inner js-file-line " > < span class = " pl-k " > for < / span > var < span class = " pl-k " > in < / span > [ < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > vendor < span class = " pl-pds " > & quot ; < / span > < / span > , < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > model < span class = " pl-pds " > & quot ; < / span > < / span > , < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > variant < span class = " pl-pds " > & quot ; < / span > < / span > ] : < / td >
< / tr >
< tr >
< td id = " L23 " class = " blob-num js-line-number " data - line - number = " 23 " > < / td >
< td id = " LC23 " class = " blob-code blob-code-inner js-file-line " > < span class = " pl-k " > if < / span > e ( < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > DEVICE_ < span class = " pl-c1 " > { } { } < / span > < span class = " pl-pds " > & quot ; < / span > < / span > . format ( prefix , var . upper ( ) ) ) : < / td >
< / tr >
< tr >
< td id = " L24 " class = " blob-num js-line-number " data - line - number = " 24 " > < / td >
< td id = " LC24 " class = " blob-code blob-code-inner js-file-line " > title [ var ] < span class = " pl-k " > = < / span > e ( < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > DEVICE_ < span class = " pl-c1 " > { } { } < / span > < span class = " pl-pds " > & quot ; < / span > < / span > . format ( prefix , var . upper ( ) ) ) < / td >
< / tr >
< tr >
< td id = " L25 " class = " blob-num js-line-number " data - line - number = " 25 " > < / td >
< td id = " LC25 " class = " blob-code blob-code-inner js-file-line " >
< / td >
< / tr >
< tr >
< td id = " L26 " class = " blob-num js-line-number " data - line - number = " 26 " > < / td >
< td id = " LC26 " class = " blob-code blob-code-inner js-file-line " > < span class = " pl-k " > if < / span > title : < / td >
< / tr >
< tr >
< td id = " L27 " class = " blob-num js-line-number " data - line - number = " 27 " > < / td >
< td id = " LC27 " class = " blob-code blob-code-inner js-file-line " > titles . append ( title ) < / td >
< / tr >
< tr >
< td id = " L28 " class = " blob-num js-line-number " data - line - number = " 28 " > < / td >
< td id = " LC28 " class = " blob-code blob-code-inner js-file-line " >
< / td >
< / tr >
< tr >
< td id = " L29 " class = " blob-num js-line-number " data - line - number = " 29 " > < / td >
< td id = " LC29 " class = " blob-code blob-code-inner js-file-line " > < span class = " pl-k " > if < / span > < span class = " pl-k " > not < / span > titles : < / td >
< / tr >
< tr >
< td id = " L30 " class = " blob-num js-line-number " data - line - number = " 30 " > < / td >
< td id = " LC30 " class = " blob-code blob-code-inner js-file-line " > titles . append ( { < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > title < span class = " pl-pds " > & quot ; < / span > < / span > : e ( < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > DEVICE_TITLE < span class = " pl-pds " > & quot ; < / span > < / span > ) } ) < / td >
< / tr >
< tr >
< td id = " L31 " class = " blob-num js-line-number " data - line - number = " 31 " > < / td >
< td id = " LC31 " class = " blob-code blob-code-inner js-file-line " >
< / td >
< / tr >
< tr >
< td id = " L32 " class = " blob-num js-line-number " data - line - number = " 32 " > < / td >
< td id = " LC32 " class = " blob-code blob-code-inner js-file-line " > < span class = " pl-k " > return < / span > titles < / td >
< / tr >
< tr >
< td id = " L33 " class = " blob-num js-line-number " data - line - number = " 33 " > < / td >
< td id = " LC33 " class = " blob-code blob-code-inner js-file-line " >
< / td >
< / tr >
< tr >
< td id = " L34 " class = " blob-num js-line-number " data - line - number = " 34 " > < / td >
< td id = " LC34 " class = " blob-code blob-code-inner js-file-line " >
< / td >
< / tr >
< tr >
< td id = " L35 " class = " blob-num js-line-number " data - line - number = " 35 " > < / td >
< td id = " LC35 " class = " blob-code blob-code-inner js-file-line " > < span class = " pl-k " > if < / span > < span class = " pl-k " > not < / span > os . path . exists ( json_path ) : < / td >
< / tr >
< tr >
< td id = " L36 " class = " blob-num js-line-number " data - line - number = " 36 " > < / td >
< td id = " LC36 " class = " blob-code blob-code-inner js-file-line " > device_info < span class = " pl-k " > = < / span > { < / td >
< / tr >
< tr >
< td id = " L37 " class = " blob-num js-line-number " data - line - number = " 37 " > < / td >
< td id = " LC37 " class = " blob-code blob-code-inner js-file-line " > < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > id < span class = " pl-pds " > & quot ; < / span > < / span > : e ( < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > DEVICE_ID < span class = " pl-pds " > & quot ; < / span > < / span > ) , < / td >
< / tr >
< tr >
< td id = " L38 " class = " blob-num js-line-number " data - line - number = " 38 " > < / td >
< td id = " LC38 " class = " blob-code blob-code-inner js-file-line " > < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > image_prefix < span class = " pl-pds " > & quot ; < / span > < / span > : e ( < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > IMAGE_PREFIX < span class = " pl-pds " > & quot ; < / span > < / span > ) , < / td >
< / tr >
< tr >
< td id = " L39 " class = " blob-num js-line-number " data - line - number = " 39 " > < / td >
< td id = " LC39 " class = " blob-code blob-code-inner js-file-line " > < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > images < span class = " pl-pds " > & quot ; < / span > < / span > : [ ] , < / td >
< / tr >
< tr >
< td id = " L40 " class = " blob-num js-line-number " data - line - number = " 40 " > < / td >
< td id = " LC40 " class = " blob-code blob-code-inner js-file-line " > < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > metadata_version < span class = " pl-pds " > & quot ; < / span > < / span > : < span class = " pl-c1 " > 1 < / span > , < / td >
< / tr >
< tr >
< td id = " L41 " class = " blob-num js-line-number " data - line - number = " 41 " > < / td >
< td id = " LC41 " class = " blob-code blob-code-inner js-file-line " > < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > supported_devices < span class = " pl-pds " > & quot ; < / span > < / span > : e ( < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > SUPPORTED_DEVICES < span class = " pl-pds " > & quot ; < / span > < / span > ) . split ( ) , < / td >
< / tr >
< tr >
< td id = " L42 " class = " blob-num js-line-number " data - line - number = " 42 " > < / td >
< td id = " LC42 " class = " blob-code blob-code-inner js-file-line " > < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > target < span class = " pl-pds " > & quot ; < / span > < / span > : < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > < span class = " pl-c1 " > { } < / span > / < span class = " pl-c1 " > { } < / span > < span class = " pl-pds " > & quot ; < / span > < / span > . format ( e ( < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > TARGET < span class = " pl-pds " > & quot ; < / span > < / span > ) , e ( < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > SUBTARGET < span class = " pl-pds " > & quot ; < / span > < / span > , < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > generic < span class = " pl-pds " > & quot ; < / span > < / span > ) ) , < / td >
< / tr >
< tr >
< td id = " L43 " class = " blob-num js-line-number " data - line - number = " 43 " > < / td >
< td id = " LC43 " class = " blob-code blob-code-inner js-file-line " > < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > titles < span class = " pl-pds " > & quot ; < / span > < / span > : get_titles ( ) , < / td >
< / tr >
< tr >
< td id = " L44 " class = " blob-num js-line-number " data - line - number = " 44 " > < / td >
< td id = " LC44 " class = " blob-code blob-code-inner js-file-line " > < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > version_commit < span class = " pl-pds " > & quot ; < / span > < / span > : e ( < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > VERSION_CODE < span class = " pl-pds " > & quot ; < / span > < / span > ) , < / td >
< / tr >
< tr >
< td id = " L45 " class = " blob-num js-line-number " data - line - number = " 45 " > < / td >
< td id = " LC45 " class = " blob-code blob-code-inner js-file-line " > < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > version_number < span class = " pl-pds " > & quot ; < / span > < / span > : e ( < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > VERSION_NUMBER < span class = " pl-pds " > & quot ; < / span > < / span > ) , < / td >
< / tr >
< tr >
< td id = " L46 " class = " blob-num js-line-number " data - line - number = " 46 " > < / td >
< td id = " LC46 " class = " blob-code blob-code-inner js-file-line " > } < / td >
< / tr >
< tr >
< td id = " L47 " class = " blob-num js-line-number " data - line - number = " 47 " > < / td >
< td id = " LC47 " class = " blob-code blob-code-inner js-file-line " > < span class = " pl-k " > else < / span > : < / td >
< / tr >
< tr >
< td id = " L48 " class = " blob-num js-line-number " data - line - number = " 48 " > < / td >
< td id = " LC48 " class = " blob-code blob-code-inner js-file-line " > < span class = " pl-k " > with < / span > < span class = " pl-c1 " > open < / span > ( json_path , < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > r < span class = " pl-pds " > & quot ; < / span > < / span > ) < span class = " pl-k " > as < / span > json_file : < / td >
< / tr >
< tr >
< td id = " L49 " class = " blob-num js-line-number " data - line - number = " 49 " > < / td >
< td id = " LC49 " class = " blob-code blob-code-inner js-file-line " > device_info < span class = " pl-k " > = < / span > json . load ( json_file ) < / td >
< / tr >
< tr >
< td id = " L50 " class = " blob-num js-line-number " data - line - number = " 50 " > < / td >
< td id = " LC50 " class = " blob-code blob-code-inner js-file-line " >
< / td >
< / tr >
< tr >
< td id = " L51 " class = " blob-num js-line-number " data - line - number = " 51 " > < / td >
< td id = " LC51 " class = " blob-code blob-code-inner js-file-line " > image_info < span class = " pl-k " > = < / span > { < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > type < span class = " pl-pds " > & quot ; < / span > < / span > : e ( < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > IMAGE_TYPE < span class = " pl-pds " > & quot ; < / span > < / span > ) , < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > name < span class = " pl-pds " > & quot ; < / span > < / span > : e ( < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > IMAGE_NAME < span class = " pl-pds " > & quot ; < / span > < / span > ) , < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > sha256 < span class = " pl-pds " > & quot ; < / span > < / span > : image_hash } < / td >
< / tr >
< tr >
< td id = " L52 " class = " blob-num js-line-number " data - line - number = " 52 " > < / td >
< td id = " LC52 " class = " blob-code blob-code-inner js-file-line " > device_info [ < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > images < span class = " pl-pds " > & quot ; < / span > < / span > ] . append ( image_info ) < / td >
< / tr >
< tr >
< td id = " L53 " class = " blob-num js-line-number " data - line - number = " 53 " > < / td >
< td id = " LC53 " class = " blob-code blob-code-inner js-file-line " >
< / td >
< / tr >
< tr >
< td id = " L54 " class = " blob-num js-line-number " data - line - number = " 54 " > < / td >
< td id = " LC54 " class = " blob-code blob-code-inner js-file-line " > < span class = " pl-k " > with < / span > < span class = " pl-c1 " > open < / span > ( json_path , < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > w < span class = " pl-pds " > & quot ; < / span > < / span > ) < span class = " pl-k " > as < / span > json_file : < / td >
< / tr >
< tr >
< td id = " L55 " class = " blob-num js-line-number " data - line - number = " 55 " > < / td >
< td id = " LC55 " class = " blob-code blob-code-inner js-file-line " > json . dump ( device_info , json_file , < span class = " pl-v " > sort_keys < / span > < span class = " pl-k " > = < / span > < span class = " pl-c1 " > True < / span > , < span class = " pl-v " > indent < / span > < span class = " pl-k " > = < / span > < span class = " pl-s " > < span class = " pl-pds " > & quot ; < / span > < span class = " pl-pds " > & quot ; < / span > < / span > ) < / td >
< / tr >
< / table >
< details class = " details-reset details-overlay BlobToolbar position-absolute js-file-line-actions dropdown d-none " aria - hidden = " true " >
< summary class = " btn-octicon ml-0 px-2 p-0 bg-white border border-gray-dark rounded-1 " aria - label = " Inline file action toolbar " >
< svg class = " octicon octicon-kebab-horizontal " viewBox = " 0 0 13 16 " version = " 1.1 " width = " 13 " height = " 16 " aria - hidden = " true " > < path fill - rule = " evenodd " d = " M1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm5 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM13 7.5a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0z " / > < / svg >
< / summary >
< details - menu >
< ul class = " BlobToolbar-dropdown dropdown-menu dropdown-menu-se mt-2 " style = " width:185px " >
< li >
< clipboard - copy role = " menuitem " class = " dropdown-item " id = " js-copy-lines " style = " cursor:pointer; " >
Copy lines
< / clipboard - copy >
< / li >
< li >
< clipboard - copy role = " menuitem " class = " dropdown-item " id = " js-copy-permalink " style = " cursor:pointer; " >
Copy permalink
< / clipboard - copy >
< / li >
< li > < a class = " dropdown-item js-update-url-with-hash " id = " js-view-git-blame " role = " menuitem " href = " /openwrt/openwrt/blame/9ba5cd86b89f5f51cbad536c051dca61a9bfe8e5/scripts/json_add_image_info.py " > View git blame < / a > < / li >
< / ul >
< / details - menu >
< / details >
< / div >
< / div >
< details class = " details-reset details-overlay details-overlay-dark " >
< summary data - hotkey = " l " aria - label = " Jump to line " > < / summary >
< details - dialog class = " Box Box--overlay d-flex flex-column anim-fade-in fast linejump " aria - label = " Jump to line " >
< ! - - ' " ` --><!-- </textarea></xmp> --></option></form><form class= " js-jump-to-line-form Box-body d-flex " action= " " accept-charset= " UTF-8 " method= " get " ><input name= " utf8 " type= " hidden " value= " ✓ " />
< input class = " form-control flex-auto mr-3 linejump-input js-jump-to-line-field " type = " text " placeholder = " Jump to line… " aria - label = " Jump to line " autofocus >
< button type = " submit " class = " btn " data - close - dialog > Go < / button >
< / form > < / details - dialog >
< / details >
< / div >
< / div >
< / main >
< / div >
< / div >
< div class = " footer container-lg width-full p-responsive " role = " contentinfo " >
< div class = " position-relative d-flex flex-row-reverse flex-lg-row flex-wrap flex-lg-nowrap flex-justify-center flex-lg-justify-between pt-6 pb-2 mt-6 f6 text-gray border-top border-gray-light " >
< ul class = " list-style-none d-flex flex-wrap col-12 col-lg-5 flex-justify-center flex-lg-justify-between mb-2 mb-lg-0 " >
< li class = " mr-3 mr-lg-0 " > & copy ; 2019 < span title = " 0.21293s from unicorn-578f6685d5-l6ddq " > GitHub < / span > , Inc . < / li >
< li class = " mr-3 mr-lg-0 " > < a data - ga - click = " Footer, go to terms, text:terms " href = " https://github.com/site/terms " > Terms < / a > < / li >
< li class = " mr-3 mr-lg-0 " > < a data - ga - click = " Footer, go to privacy, text:privacy " href = " https://github.com/site/privacy " > Privacy < / a > < / li >
< li class = " mr-3 mr-lg-0 " > < a data - ga - click = " Footer, go to security, text:security " href = " https://github.com/security " > Security < / a > < / li >
< li class = " mr-3 mr-lg-0 " > < a href = " https://githubstatus.com/ " data - ga - click = " Footer, go to status, text:status " > Status < / a > < / li >
< li > < a data - ga - click = " Footer, go to help, text:help " href = " https://help.github.com " > Help < / a > < / li >
< / ul >
< a aria - label = " Homepage " title = " GitHub " class = " footer-octicon d-none d-lg-block mx-lg-4 " href = " https://github.com " >
< svg height = " 24 " class = " octicon octicon-mark-github " viewBox = " 0 0 16 16 " version = " 1.1 " width = " 24 " aria - hidden = " true " > < path fill - rule = " evenodd " d = " M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z " / > < / svg >
< / a >
< ul class = " list-style-none d-flex flex-wrap col-12 col-lg-5 flex-justify-center flex-lg-justify-between mb-2 mb-lg-0 " >
< li class = " mr-3 mr-lg-0 " > < a data - ga - click = " Footer, go to contact, text:contact " href = " https://github.com/contact " > Contact GitHub < / a > < / li >
< li class = " mr-3 mr-lg-0 " > < a href = " https://github.com/pricing " data - ga - click = " Footer, go to Pricing, text:Pricing " > Pricing < / a > < / li >
< li class = " mr-3 mr-lg-0 " > < a href = " https://developer.github.com " data - ga - click = " Footer, go to api, text:api " > API < / a > < / li >
< li class = " mr-3 mr-lg-0 " > < a href = " https://training.github.com " data - ga - click = " Footer, go to training, text:training " > Training < / a > < / li >
< li class = " mr-3 mr-lg-0 " > < a href = " https://github.blog " data - ga - click = " Footer, go to blog, text:blog " > Blog < / a > < / li >
< li > < a data - ga - click = " Footer, go to about, text:about " href = " https://github.com/about " > About < / a > < / li >
< / ul >
< / div >
< div class = " d-flex flex-justify-center pb-6 " >
< span class = " f6 text-gray-light " > < / span >
< / div >
< / div >
< div id = " ajax-error-message " class = " ajax-error-message flash flash-error " >
< svg class = " octicon octicon-alert " viewBox = " 0 0 16 16 " version = " 1.1 " width = " 16 " height = " 16 " aria - hidden = " true " > < path fill - rule = " evenodd " d = " M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 000 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 00.01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z " / > < / svg >
< button type = " button " class = " flash-close js-ajax-error-dismiss " aria - label = " Dismiss error " >
< svg class = " octicon octicon-x " viewBox = " 0 0 12 16 " version = " 1.1 " width = " 12 " height = " 16 " aria - hidden = " true " > < path fill - rule = " evenodd " d = " M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48L7.48 8z " / > < / svg >
< / button >
You can ’ t perform that action at this time .
< / div >
< script crossorigin = " anonymous " integrity = " sha512-TbfkaZYiU/5xEbirWto8uf216HR0LY6DbUyKGPkXyqtzi73Y7Fq22NVp6y9ED/q70aRfHcBF4M45Vi7tQK9yVQ== " type = " application/javascript " src = " https://github.githubassets.com/assets/compat-bootstrap-04d4095a.js " > < / script >
< script crossorigin = " anonymous " integrity = " sha512-P7QbxhTkfogU8wuMH3u9CEiNA9esk13jExiHBnpW+Kh9fKban2yNVEok9xzV2GqSuEU3ZbCKe0GooUfc6szm4g== " type = " application/javascript " src = " https://github.githubassets.com/assets/frameworks-e0eb4964.js " > < / script >
< script crossorigin = " anonymous " async = " async " integrity = " sha512-UjV5G8yJkGcA9OW3TPPQx+Rk3uyOfOVmYEWLj7ADv81bEy8Jp9oDULYFdQxOxJq518DFlt0+dBqobwvarLrNgA== " type = " application/javascript " src = " https://github.githubassets.com/assets/github-bootstrap-35e32afb.js " > < / script >
< div class = " js-stale-session-flash flash flash-warn flash-banner " hidden
>
< svg class = " octicon octicon-alert " viewBox = " 0 0 16 16 " version = " 1.1 " width = " 16 " height = " 16 " aria - hidden = " true " > < path fill - rule = " evenodd " d = " M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 000 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 00.01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z " / > < / svg >
< span class = " js-stale-session-flash-signed-in " hidden > You signed in with another tab or window . < a href = " " > Reload < / a > to refresh your session . < / span >
< span class = " js-stale-session-flash-signed-out " hidden > You signed out in another tab or window . < a href = " " > Reload < / a > to refresh your session . < / span >
< / div >
< template id = " site-details-dialog " >
< details class = " details-reset details-overlay details-overlay-dark lh-default text-gray-dark hx_rsm " open >
< summary role = " button " aria - label = " Close dialog " > < / summary >
< details - dialog class = " Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal " >
< button class = " Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0 " type = " button " aria - label = " Close dialog " data - close - dialog >
< svg class = " octicon octicon-x " viewBox = " 0 0 12 16 " version = " 1.1 " width = " 12 " height = " 16 " aria - hidden = " true " > < path fill - rule = " evenodd " d = " M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48L7.48 8z " / > < / svg >
< / button >
< div class = " octocat-spinner my-6 js-details-dialog-spinner " > < / div >
< / details - dialog >
< / details >
< / template >
< div class = " Popover js-hovercard-content position-absolute " style = " display: none; outline: none; " tabindex = " 0 " >
< div class = " Popover-message Popover-message--bottom-left Popover-message--large Box box-shadow-large " style = " width:360px; " >
< / div >
< / div >
< div aria - live = " polite " class = " js-global-screen-reader-notice sr-only " > < / div >
< / body >
< / html >
2019-10-20 12:03:52 +00:00