Announcement of Transition to Eclipse Foundation

It has been over twenty-one years since the OSGi Alliance was formed – sponsored by several major corporations such as Ericsson, IBM, Oracle, and Sun Microsystems – to create open specifications, reference implementations, and compliance tests to establish an architecture and programming model that was modular, dynamic, and service-oriented.  These standards were initially targeted at “Internet gateways”, what we would call today an Edge Computing device, but over the years would address a plethora of computing environments.
The world has changed a lot since 1999.  Oracle acquired Sun Microsystems, Ericsson is a much different company, and IBM and Oracle are no longer the biggest names in tech.    The world of software specifications development has also seen vast changes, being heavily impacted and influenced today by open source projects.
In 1999 open source projects were just starting to become recognized by major Information Technology providers.  The Apache Software Foundation was just getting started, the Linux operating system was beginning to be supported by computer hardware manufacturers, and it would be another 5 years before the Eclipse Foundation was established.
Now open source projects have become the primary source for open technology for software developers.  Even the OSGi Alliance depends on open source projects for the vast majority of its reference implementations.   A “code first” approach has taken hold for open standards too.  We can see examples of this at the Eclipse Foundation in their Jakarta EE platform project and at OASIS in their OASIS Open Projects.
Another thing has changed too, the OSGi Alliance no longer has the critical mass necessary to continue as a stand-alone organization.   
When this became evident to the OSGi Board of Directors, they began to examine and plan how best to deal with the future.  After a great deal of work examining every reasonable alternative it was decided the best course of action was to transfer the assets of the OSGi Alliance to the Eclipse Foundation, with the expectation that future specification development will continue there, and dissolve the OSGi Alliance.  The OSGi Board of Directors has reached an agreement with the Eclipse Foundation to establish an Eclipse OSGi Working Group which will be the home for the continued evolution of the OSGi specifications.  Current OSGi Alliance members and others that wish to participate will need to be members of the Eclipse Foundation itself, and also members of the Eclipse OSGi Working Group.   The Eclipse Foundation intends to waive the membership fees for the OSGi Working Group for the rest of 2020. 
To quote Mike Milinkovich, the Executive Director of the Eclipse Foundation, “The Eclipse Foundation is pleased to become the home for the future evolution of the OSGi’s specifications.  Our working group model and the Eclipse Foundation Specification Process both provide a natural framework for the important work that continues under the OSGi banner, and our communities are both very comfortable with each other already. We thank the OSGi Alliance’s Board of Directors for their trust, and we look forward to working with OSGi Alliance’s members and developers as we continue down this path.”
I certainly hope that everyone will join the efforts at the Eclipse Foundation to continue the work that started 21 years ago.  
It has been a pleasure to serve you all these years and I look forward to continuing to work with you in the Eclipse OSGi Working Group.
Best wishes for the future,
Dan Bandera, President of the OSGi Alliance
Q: Why the Eclipse Foundation? 
A: The OSGi Alliance and the Eclipse Foundation share many of the same members, and we have had a long, synergistic relationship between our organizations.  
  • The Eclipse Equinox project has hosted the OSGi Framework Reference Implementation for many years and many releases.  
  • The Eclipse Foundation, like the OSGi Alliance, is a non-profit, vendor-neutral organization which simplifies the transfer of OSGi Alliance assets and mission to them.
  • We have held joint EclipseCon / OSGi Community Event developer conferences for the past 8 years.    
  • The Eclipse Foundation is home for many Java technology related open source projects like Jakarta EE, OpenJ9, OMR,  MicroProfile, Transformer, Vert.x and many more.
  • The Eclipse Foundation has developed a robust specification process over the last two years which can produce specifications allowing for Intellectual Property grants and benefits very similar to those of OSGi Specifications.
  • The Eclipse Foundation continues to thrive and grow which provides a safe home for the planned Eclipse OSGi Working Group.
Q: Where will we find the old OSGi specifications in the future ?
A: Currently published OSGi specifications are available at The planned Eclipse OSGi Working Group will decide if a different location is appropriate.
Q: For existing published OSGi Specifications what will be users/implementors rights be after the OSGi Alliance dissolves?
A: There will be no change in rights. The existing published OSGi Specifications will remain available under their existing license.
Q: What about reference implementations and compliance tests?
A: Almost all existing OSGi Reference Implementations are in open source projects at the Eclipse Foundation or the Apache Software Foundation (Eclipse Equinox, Apache Aries, Apache Felix, etc.) and should continue to be available directly from those projects.  Those that are not will most likely be made available in a GitHub repository sometime in the future. The planned Eclipse OSGi Working Group will make this decision.
Q: How will the Eclipse specification process differ from the OSGi specification process?
A: BIG Question! There will be changes. Please see the following resources (in the order listed):
Q: Will new specifications from the Eclipse OSGi Working Group have a different license ?
Q: How will this transition affect the development of Bnd/Bndtools?
A: This transition won’t affect Bnd/Bndtools which is a separate open source project.
Q: What are the next steps? What should be done to participate in the Eclipse OSGi Working Group?
A: To participate in future OSGi specification development you will first need to be a member of the Eclipse Foundation itself. Subsequent to that, you will also need to be a member of the Eclipse OSGi Working Group.
Q: How can we join the Eclipse OSGi Working Group?
A: At this time, the Eclipse OSGi Working Group has yet to be formed. So right now, you can join the Eclipse Foundation itself and we will communicate when the Eclipse OSGi Working Group is ready to be joined.
Q: Who do I contact if I have further questions?

Self-Help Hacks at the End of the World

I suspect the reason this type of structural analysis isn’t more popular is that it makes demands that are decidedly unpalatable to supporters of American capitalism. Plus, it doesn’t make for particularly clicky articles. Once one comes to the conclusion that mental health problems are structural, not individual, one must then propose solutions in the same vein. If the problem is that people are stressed because they don’t have enough money, then it follows that wages should be raised and wealth taxed to more equitably distribute profits. If people don’t have enough power in the workplace, perhaps sectoral unions are in order. If people are anxious about paying for health care, perhaps we should have Medicare for All. If people are overworked, perhaps there should be a federal mandate that all workers must receive five weeks of paid vacation, as France has. The purpose of the Covid self-help genre, then, is to quell dissent by way of telling people that they can figure out how to cope all by themselves (or perhaps with their therapist, should they be lucky enough to afford one). It’s incredibly patronizing.

The Wall Street Journal article that suggested wearing work clothes to work from home—or any number of stories just like it—was attempting to address a widespread problem: People can’t focus. The reason people can’t focus is because they are stressed out. Their brains are producing a lot of cortisol, which interferes with memory and attention. A social determinants of health approach would ask why people are so stressed to begin with and then focus on finding solutions that address the root causes of this stress.

Primarily, people are stressed about money. They are stressed, perhaps, because they hate their job—which may have come to feel newly pointless in a pandemic. And they are stressed because their job—pointless or not—might vanish in an instant, plunging them into a slack labor market. In the United States, the stress of losing a job is largely the stress of losing a precarious grip on material stability that isn’t guaranteed by any other means. If you lose your job, you lose your health insurance, unless your spouse (should you have one) is fortunate enough to have employment-based health insurance of their own. You probably can’t afford to make your rent or mortgage payments, which puts you at risk of eviction and homelessness. After that, it is very difficult to get back on your feet.

Were we to take a social determinants of health approach to this problem, our solutions would probably not include telling people to wear a nice shirt on a Zoom call in order to quiet their fears. Our solutions would almost certainly include the issuance of monthly, living-wage stimulus checks to all Americans for the duration of the crisis, instead of a one-time $1,200 payment for people making under $99,000 a year; or an unemployment insurance policy that provides generous, easy to obtain, guaranteed payments, instead of fluctuating at the whims of an indifferent legislature; or rent cancellation so that tenants are relieved from the burden of rent and the growing burden of months of back rent. There is no shortage of social policy—Medicare for All, cash welfare, free childcare—that would do much the same. But such policy solutions are often seen as outside the realm of “mental health.”

Moving to NextCloud from Google Drive

I’ve toyed around with moving away from Google Drive for a few years now, honestly from less of a die-hard-privacy-proponent-point-of-view but more because I thought it would be interesting to try to replace it with something self-managed.

I found NextCloud about a year ago and spun up an instance on my local server. I used it primarily to host raw GoPro footage from hikes, off-roading trips, and vacations, but I figured it might be time to take the leap to try it out as a full replacement. If I don’t like it, I figure I can always move all the files back to Google Drive whenever I want to.

The NextCloud instance is running in Docker in my local server. It’s accessible on my local network, which I can VPN into to remotely access my files. haproxy and dnsmasq containers handle DNS and a custom local network domain for the NextCloud container. I’ve detailed the set up of my local Docker host in another post. The host has a 2TB Raid array that the NextCloud container binds for storage.

I recently put together a new server/networking cabinet. I found the IKEA Besta cabinet locally and put it on top of these hairpin legs from Amazon.

FYI: If you buy something through an Amazon link, I may earn a commission.

With NextCloud configured, I figured I’d just download all my files from Google Drive and upload them through the NextCloud web interface. This was terrible. Chrome kept running out of memory. I suppose NextCloud just isn’t optimized for uploading a couple gigs through the web interface. Instead, I downloaded the desktop app and uploaded my files through that. It took a while but worked flawlessly.

Once my files were good to go, I set up an S3 bucket to use as a remote backup, then installed rclone on my host. I set up a simple cron job to sync the entire NextCloud binded directory to S3 nightly with:

rclone sync /path/to/nextcloud/bind/ rclone_remote:bucket_name

With backups in place, I installed the client apps on my devices and have been pleasntly surprised with the experience. I use Apple devices so I’m trying out Pages and the other Apple office apps; it’s a convenient departure from Google Docs which I’ve used for a good decade now, and I was excited to see with NextCloud installed on iOS, my server showed up as a source for opening files from within iOS Pages. That was a much easier workflow than I expected.

All in all it seems pretty nice and I’ll try this out for the long run. If I really like it, I’ll try migrating my photos from Google Photos as well; I noticed NextCloud has a photo backup feature for iOS but I haven’t tried it out yet.

Props to NextCloud. This is a really nice free product.

Permian Epoch Mass Extinction Driver Identified

Credit: CC0 Public Domain

Life on Earth has a long, but also an extremely turbulent history. On more than one occasion, the majority of all species became extinct and an already highly developed biodiversity shrank to a minimum again, changing the course of evolution each time. The most extensive mass extinction took place about 252 million years ago. It marked the end of the Permian Epoch and the beginning of the Triassic Epoch. About three quarters of all land life and about 95 percent of life in the ocean disappeared within only a few thousand years.

Gigantic volcanic activities in today’s Siberia and the release of large amounts of methane from the sea floor have been long debated as potential triggers of the Permian-Triassic extinction. But the exact cause and the sequence of events that led to the mass extinction remained highly controversial. Now, scientists from Germany, Italy and Canada, in the framework of the EU-funded project BASE-LiNE Earth led by Prof. Dr. Anton Eisenhauer from GEOMAR Helmholtz Centre for Ocean Research Kiel in cooperation with the Helmholtz Centre Potsdam GFZ German Research Centre for Geosciences, have for the first time been able to conclusively reconstruct the entire cascade of events at that time using cutting-edge analytical techniques and innovative geochemical modeling. The study has been published today in the international journal Nature Geoscience.

For their study, the BASE-LiNE Earth team used a previously often neglected environmental archive: the shells of fossil brachiopods. “These are clam-like organisms that have existed on Earth for more than 500 million years. We were able to use well-preserved brachiopod fossils from the Southern Alps for our analyses. These shells were deposited at the bottom of the shallow shelf seas of the Tethys Ocean 252 million years ago and recorded the shortly before and at the beginning of extinction,” explains Dr. Hana Jurikova. She is first author of the study, which she conducted as part of the BASE-LiNE Earth project and her doctoral thesis at GEOMAR.

By measuring different isotopes of the element boron in the fossil shells, the team was able to trace the development of the pH values in the ocean 252 million years ago. Since seawater pH is tightly coupled to the CO2 concentration in the atmosphere, the reconstruction of the latter was also possible. For the analyses, the team used high-precision isotope analyses at GEOMAR as well as high-resolution microanalyses on the state-of-the-art large-geometry secondary ion mass spectrometer (SIMS) at GFZ.

“With this technique, we can not only reconstruct the evolution of the atmospheric CO2 concentrations, but also clearly trace it back to volcanic activity. The dissolution of methane hydrates, which had been suggested as a potential further cause, is highly unlikely based on our data,” explains Dr. Marcus Gutjahr from GEOMAR, co-author of the study.

How a greenhouse catastrophe killed nearly all life Illustration depicting the onset of the Permian-Triassic mass extinction based on findings of Jurikova et al. (2020). Ocean acidification and vanishing marine life in the surface ocean caused by a large release of volcanic CO2 from Siberian Traps. Illustrated by: Dawid Adam Iurino Credit: (PaleoFactory, Sapienza University of Rome) for Jurikova et al. (2020).

As a next step, the team fed their data from the boron and additional carbon isotope-based investigations into a computer-based geochemical model that simulated the Earth’s processes at that time. Results showed that warming and ocean acidification associated with the immense volcanic CO2 injection to the atmosphere was already fatal and led to the extinction of marine calcifying organisms right at the onset of the extinction. However, the CO2 release also brought further consequences; with increased global temperatures caused by the greenhouse effect, chemical weathering on land also increased.

Over thousands of years, increasing amounts of nutrients reached the oceans via rivers and coasts, which then became over-fertilized. The result was a large-scale oxygen depletion and the alteration of entire elemental cycles. “This domino-like collapse of the inter-connected life-sustaining cycles and processes ultimately led to the observed catastrophic extent of mass extinction at the Permian-Triassic boundary,” summarizes Dr. Jurikova.

The study was conducted within the framework of the EU-funded ITN project BASE-LiNE Earth, in which the use of brachiopods as an environmental archive was systematically studied for the first time, and relevant analytical methods were improved and newly developed. “Without these new techniques it would be difficult to reconstruct environmental processes more than 250 million years ago in the same level of detail as we have done now,” emphasizes Prof. Dr. Anton Eisenhauer from GEOMAR, the former BASE-LiNE Earth project coordinator and co-author of the new study, “in addition, the new methods can be applied for other scientific applications.”

Explore further

New insight into the Great Dying

More information: Hana Jurikova et al, Permian–Triassic mass extinction pulses driven by major marine carbon cycle perturbations, Nature Geoscience (2020). DOI: 10.1038/s41561-020-00646-4

Citation: Driver of the largest mass extinction in the history of the Earth identified (2020, October 19) retrieved 20 October 2020 from

This document is subject to copyright. Apart from any fair dealing for the purpose of private study or research, no part may be reproduced without the written permission. The content is provided for information purposes only.

List of deprecated features in latest Google Groups

“);return(new DOMParser).parseFromString(Gd(a),”text/html”).body.children[0]}
function ok(a,b){if(!a)return id;var c=document.createElement(“div”).style,e=rk(a);Pb(e,function(f){var h=pe&&f in lk?f:f.replace(/^-(?:apple|css|epub|khtml|moz|mso?|o|rim|wap|webkit|xv)-(?=[a-z])/i,””);Fc(h,”–“)||Fc(h,”var”)||(f=ik(a,f),f=Ij(h,f,b),null!=f&&jk(c,h,f))});
return Td(c.cssText||””)}
function sk(a){var b=Array.from(ak(Qj,a,”getElementsByTagName”,[“STYLE”])),c=dc(b,function(f){return bc(ek(f).cssRules)});
c=nk(c);c.sort(function(f,h){f=Bj(f.selectorText);a:{h=Bj(h.selectorText);for(var k=Math.min(f.length,h.length),n=0;n”+c+””),sk(c),c=c.innerHTML);c=Sd(uc(“Never attached to DOM.”),c);var e=document.createElement(“template”);if(yk&&”content”in e)Vd(e,c),e=e.content;else{var f=document.implementation.createHTMLDocument(“x”);e=f.body;Vd(f.body,c)}c=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT|NodeFilter.SHOW_TEXT,null,!1);for(e=
uk?new WeakMap:new wk;f=c.nextNode();){c:{var h=a;var k=f;switch(gk(k)){case 3:h=Uk(h,k);break c;case 1:if(“TEMPLATE”==fk(k).toUpperCase())h=null;else{var n=fk(k).toUpperCase();if(n in h.ta)var t=null;else h.ka[n]?t=document.createElement(n):(t=mh(“SPAN”),h.ya&&ck(t,”data-sanitizer-original-tag”,n.toLowerCase()));if(t){var u=t,w=bk(k);if(null!=w)for(var na=0;n=w[na];na++)if(n.specified){var y=h;var pa=k,ta=n,;if(Fc(ua,”data-sanitizer-“))y=null;else{var Aa=fk(pa);ta=ta.value;var Da={tagName:Hc(Aa).toLowerCase(),
attributeName:Hc(ua).toLowerCase()},Ba={Mk:void 0};”style”==Da.attributeName&&(Ba.Mk=dk(pa));pa=Rk(Aa,ua);pa in y.o?(y=y.o[pa],y=y(ta,Da,Ba)):(ua=Rk(null,ua),ua in y.o?(y=y.o[ua],y=y(ta,Da,Ba)):y=null)}null!==y&&ck(u,,y)}h=t}else h=null}break c;default:h=null}}if(h){if(1==gk(h)&&e.set(f,h),f=hk(f),k=!1,f)n=gk(f),t=fk(f).toLowerCase(),u=hk(f),11!=n||u?”body”==t&&u&&(n=hk(u))&&!hk(n)&&(k=!0):k=!0,n=null,k||!f?n=b:1==gk(f)&&(n=e.get(f)),n.content&&(n=n.content),n.appendChild(h)}else qh(f)}e.clear&&
e.clear();a=b}else a=mh(“SPAN”);0″)+1,a.lastIndexOf(“”))}else a=””;return Sd(uc(“Output of HTML sanitizer”),a)}
function Uk(a,b){var;(b=hk(b))&&”style”==fk(b).toLowerCase()&&!(“STYLE”in a.ta)&&”STYLE”in a.ka&&(c=xd(pk(c,a.ha,Db(function(e,f){return,{fs:f})},a))));
return document.createTextNode(c)}
;function Vk(a){var b=new Ek;;b.ta=fc;b=Jk(b,fc);b.ka=bd;b=new Dk(Ik(b,bd));return Tk(b,a)}
function Wk(a){var b=new Dk(new Ek);return Tk(b,a)}
;function Xk(a){Te(this,a,-1,null,null)}
x(Xk,Re);l=Xk.prototype;l.wa=ma(30);l.Lb=ma(51);l.Na=function(){return cf(this,3,0)};
l.Ua=function(){return cf(this,6,””)};
l.kb=function(a){return gf(this,6,a)};function Yk(a){Te(this,a,-1,null,null)}
x(Yk,Re);Yk.prototype.wa=ma(29);var Zk;function $k(a,b){b=void 0===b?2E3:b;var c=document.querySelector(“.sc-assertive-live-region”);c&&(c.textContent=a,clearTimeout(Zk),Zk=setTimeout(function(){c.textContent=””},b))}
;function al(){bl(this)},b,c){var e=this;cl(this,a,c);this.ha.textContent=b||””;E(this.o,”material-snackbar–active”,!0);this.ta&&window.clearTimeout(this.ta);this.ta=window.setTimeout(function(){return e.Ag()},c||2750);
return this};
function cl(a,b,c){a.ka.textContent=b;$k(b,void 0===c?2750:c)}
function bl(a){a.o=document.createElement(“div”);a.o.className=”material-snackbar”;a.ka=document.createElement(“div”);a.ka.className=”material-snackbar__message”;a.o.appendChild(a.ka);a.ha=document.createElement(“button”);a.ha.className=”material-snackbar__action”;a.ha.addEventListener(“click”,function(){;a.Ag()});
al.prototype.Ag=function(){E(this.o,”material-snackbar–active”,!1)};{;return this};;al.prototype.dismiss=al.prototype.Ag;;var dl=”closure_listenable_”+(1E6*Math.random()|0),el=0;/*

Copyright 2018 The Incremental DOM Authors. All Rights Reserved.

Licensed under the Apache License, Version 2.0 (the “License”);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an “AS-IS” BASIS,
See the License for the specific language governing permissions and
limitations under the License.
var fl=Object.prototype.hasOwnProperty;function gl(){}
gl.prototype=Object.create(null);function hl(a,b){for(;a.length>b;)a.pop()}
function il(a){a=Array(a);hl(a,0);return a}
;var jl=new gl;jl.__default=function(a,b,c){var e=typeof c;”object”===e||”function”===e?a[b]=c:null==c?a.removeAttribute(b):(e=0===b.lastIndexOf(“xml:”,0)?””:0===b.lastIndexOf(“xlink:”,0)?””:null)?a.setAttributeNS(e,b,String(c)):a.setAttribute(b,String(c))};,b,c){;if(“string”===typeof c)a.cssText=c;else{a.cssText=””;for(var e in c)if(,e)){b=e;var f=c[e];0b.length)throw Error(“Could not parse ‘”+a+”‘ as a color.”);b.length=4;return new (Function.prototype.bind.apply($l,[null].concat(za(}
function bm(a){var b=cm(a,dm);a=cm(a,em);return 3.1>b&&a>b}
var em=new $l(0,0,0),dm=new $l(255,255,255);function cm(a,b){a=.2126*fm(a.ka)+.7152*fm(a.ha)+.0722*fm(a.o)+.05;b=.2126*fm(b.ka)+.7152*fm(b.ha)+.0722*fm(b.o)+.05;return Math.max(a,b)/Math.min(a,b)}
function fm(a){a/=255;return.03928>a?a/12.92:Math.pow((a+.055)/1.055,2.4)}
;function gm(){ Map;this.Ca=new Set;this.ya=new Map;this.Ea=new Set}
gm.prototype.Vb=function(a,b){var c;if(“function”===typeof a)this.Ca.add(hm(a));else{var e=null!==( 0!==c?c:new Set;e.add(hm(b));,e)}};
function im(a,b){var c,e=null!==( 0!==c?c:new Set;c=new Set([].concat(za(a.Ca),za(e)));c=p(c);for(;!e.done;,e();var f;b=null!==(f=a.ya.get(b))&&void 0!==f?f:new Set;a=new Set([].concat(za(a.Ea),za(b)));a=p(a);for(;!f.done;}
function hm(a){if(“function”!==typeof a)throw Error(“Expected [handler] to be a function. Instead received “+typeof a);return a}
;function jm(a){;this.text=””;this.disabled=!1;this.Bh=!0;this.maxWidth=this.icon=this.Hb=””;;this.Tg=this.hh=!1;this.Od(a)}
Na(jm,gm);l=jm.prototype;l.Od=function(a){var b=void 0===a.Hb?””:a.Hb,c=void 0===a.icon?””:a.icon,e=void,f=void 0===a.disabled?!1:a.disabled,h=void 0===a.Bh?!0:a.Bh,,n=a.$m,t=void 0===a.hh?!1:a.hh,u=void 0===a.maxWidth?””:a.maxWidth,w=a.trigger,na=void 0===a.Tg?!1:a.Tg;this.text=void 0===a.text?””:a.text;this.Hb=b;;this.$m=n;this.maxWidth=u;this.hh=t;this.icon=c;;this.disabled=f;this.Bh=h;this.trigger=w;this.Tg=na};
l.Ta=function(){return this.text};
l.Xc=ma(53);l.Lh=function(){return this.Hb};
l.Ff=function(){return this.icon};
l.Gf=function(){return this.maxWidth};
l.getStyle=function(){return};{return this.trigger};
function km(a){return””!==a.Ta()&&””!==a.Ff()&&a.Tg}
function mm(a){return””!==a.Ta()&&””!==a.Ff()&&!a.Tg}
;var nm={“account_circle.svg”:uc(‘n n nn’),
“add.svg”:uc(‘n n nn’),”announcement.svg”:uc(‘n n nn’),”arrow_back.svg”:uc(‘n n nn’),
“arrow_drop_down.svg”:uc(‘n’),”arrow_forward.svg”:uc(‘n’),”chat.svg”:uc(‘n n nn’),
“check.svg”:uc(‘n n nn’),”check_circle.svg”:uc(‘n n nn’),
“check_circle_outline.svg”:uc(‘n n nn’),”close.svg”:uc(‘n n nn’),
“content_copy.svg”:uc(‘n nn’),”down_arrow.svg”:uc(‘n n nn’),”drive_document.svg”:uc(‘n n nn’),
“email.svg”:uc(‘n n nn’),”error_outline.svg”:uc(‘n n nn’),
“face.svg”:uc(‘n’),”filter_list.svg”:uc(‘n nn’),
“format_quote.svg”:uc(‘n nn’),”help_outline.svg”:uc(‘n n nn’),
“keyboard_arrow_up.svg”:uc(‘n n nn’),”language.svg”:uc(‘n’),
“mode_edit.svg”:uc(‘n n nn’),”open_in_new.svg”:uc(‘n’),
“phone.svg”:uc(‘n n nn’),”play_arrow.svg”:uc(‘n n nn’),
“public.svg”:uc(‘n n nn’),”question_answer.svg”:uc(‘n n nn’),
“restart_alt.svg”:uc(‘n n nn’),”search.svg”:uc(‘n n nn’),
“star_boarder.svg”:uc(‘n’),”supervised_user_circle.svg”:uc(‘n n n n nn’),
“warning.svg”:uc(‘n n nn’)};var om=”arrow_back arrow_forward chevron_left chevron_right exit_to_app first_page format_quote last_page navigate_before navigate_next open_in_new star_half gm/arrow_back gm/arrow_forward gm/format_quote gm/help_outline gm/open_in_new”.split(” “);function pm(a){var b=a.icon,c=void 0===a.size?24:a.size,e=void 0===a.Ec?!1:a.Ec;a=void 0===a.Ug?[]:a.Ug;,”sc.shared.MaterialIcon”);this.o=b;this.ka=c;this.ta=a;this.ha=e}
Na(pm,Vl);pm.prototype.content=function(){var a=this,b=this.ka/16+”rem”,c={root:!0,baseline:this.ha,flip:-1!=om.indexOf(this.o)},e=0==this.o.indexOf(“gm/”);e||(c[“text-icon”]=!0);for(var f=p(this.ta),;!h.done;,””!==h&&(c[h]=!0);e?this.element(“div”,”class”,c,”style”,{width:b,height:b},function(){Tl(nm[a.o.replace(“gm/”,””)+”.svg”])}):this.element(“div”,”class”,c,”style”,”font-size: “+b,this.o)};var qm=[{opacity:0},{opacity:.16,offset:.25},{opacity:.16,offset:.5},{opacity:0}],rm={duration:300},sm={duration:225,easing:”cubic-bezier(.4, .0, .2, 1)”};function tm(a){a=void 0===a?{}:a;a=void 0===a.Ak?!1:a.Ak;,”sc.shared.MaterialInteractionOverlay”);var b=this;this.Ba=a; 0;this.ha=!1;this.ya=function(c){um(b,c.clientX,c.clientY,b.Ba)};
Na(tm,Vl);tm.prototype.content=function(){var a=this,b=bm(am(getComputedStyle(this.element(“span”)).color));“div”,”class”,{root:!0,”light-text”:b,hover:this.ha},function(){a.element(“div”,”class”,”hover-overlay”);a.element(“div”,”class”,”pressed-overlay”);a.o=a.element(“div”,”class”,”ripple”)});
function vm(a){setTimeout(function(){var,c=a.ab()&&a.ab().parentElement;b!==c&&(b&&(b.removeEventListener(“mousedown”,a.ya),b.removeEventListener(“mouseenter”,a.ka),b.removeEventListener(“mouseleave”,a.ta)),c&&(c.addEventListener(“mousedown”,a.ya),c.addEventListener(“mouseenter”,a.ka),c.addEventListener(“mouseleave”,a.ta)),},0)}
function wm(a,b){“Enter”!=b.code&&”Space”!=b.code||um(a,0,0,!0)}
function um(a,b,c,e){if(a.o.animate){var,h=.6*Math.max(f.width,f.height)/256,k=(Math.sqrt(Math.pow(f.width/2,2)+Math.pow(f.height/2,2))+10)/128;if(e)b=f=”calc(50% – 128px)”,h=”scale(“+h+”)”,k=”scale(“+k+”)”;else{b=b-f.left-128;var;c=f.width/2-128-b;e=f.height/2-128-n;f=n+”px”;b+=”px”;h=”translate(0, 0) scale(“+h+”)”;k=”translate(“+c+”px, “+e+”px) scale(“+k+”)”}h=[{transform:h},{transform:k}];;;;a.o.animate(qm,
;function xm(a){a=void 0===a?{}:a;,”sc.shared.MaterialButton”);this.model=a instanceof jm?a:new jm(a);this.o=new tm;Yl(this,this.model)}
l.content=function(a){var b=this;a&&this.model.Od(a);var c=””!==this.model.Ta(),e=””!==this.model.Ff();this.ha=this.element(“button”,”class”,{root:!0,text:1===this.model.getStyle()||2===this.model.getStyle(),grey:2===this.model.getStyle()||6===this.model.getStyle()&&c,hairline:3===this.model.getStyle(),filled:4===this.model.getStyle(),”protected”:5===this.model.getStyle(),navigational:6===this.model.getStyle()&&!c,”navigational-alt”:7===this.model.getStyle(),”left-icon”:mm(this.model),”right-icon”:km(this.model),
“icon-only”:e&&!c,”small-icon”:this.model.hh,hidden:!this.model.Bh,overflow:””!==this.model.Gf()},”style”,””===this.model.Gf()?null:{“max-width”:this.model.Gf()},”type”,”button”,”aria-label”,this.model.Lh(),”aria-expanded”,,”aria-controls”,this.model.$m,”disabled”,this.model.disabled,”onclick”,function(f){b.Jc(f)},”onkeydown”,function(f){b.o&&wm(b.o,f)},function(){e&&b.element(“span”,”class”,”icon”,new pm({icon:b.model.Ff(),
l.Kf=function(){return this.model.disabled};
l.Xc=ma(52);l.Ta=function(){return this.model.Ta()};
l.focus=function(){var a;null===(a=this.ha)||void 0===a?void 0:a.focus()};function ym(){this.ha={};this.o=0}
l=ym.prototype;l.format=function(a){var b=ee(“SafeHtmlFormatter:”);a=ee(a).replace(new RegExp(“{“+b+”[w]+}”,”g”),Db(this.Pv,this,[]));return Id(a,null)};
l.Pv=function(a,b){a=this.ha[b];if(!a)return b;b=””;a.He&&(b+=””);a.html&&(b+=a.html);a.xe&&(b+=””+a.xe+”>”);return b};
l.He=function(a,b){Md(a);return zm(this,{He:a,attributes:Qd(b)})};
l.xe=function(a){Md(a);return zm(this,{xe:a})};
l.text=function(a){return zm(this,{html:ee(a)})};
l.safeHtml=function(a){return zm(this,{html:Gd(a).toString()})};
function zm(a,b){a.o++;var c=”{SafeHtmlFormatter:”+a.o+”_”+ge()+”}”;a.ha[ee(c)]=b;return c}
;function Am(a){window.sc_nullFunction=function(){};
this.ha=(this.o=void 0===a?!1:a)?”//”:Og(“mojoMetricsUrl”);this.o&&(window.sc_trackSearchResultEnabledRceTracking=!0)}
l=Am.prototype;l.Xp=function(){var a=this;if(!this.o)for(var b=Lg().querySelectorAll(“a[data-search-session-id]”),c={},e=0;e .heading”).getAttribute(“data-search-dym-tracking-id”),a.$l(f,b,h,e,c)):(e=””!==fg(“symptom”),a.ff(f,h,b.getAttribute(“data-search-rank”),b.getAttribute(“data-search-result-id”),b.getAttribute(“data-search-request-id”),b.getAttribute(“data-search-url”),
function Cm(a,b){function c(){h&&k&&((window.sc_delayLocationHandler=e)?e(f):zg(f))}
if(“_blank”||b.shiftKey||b.ctrlKey||b.metaKey)return null;var e=window.sc_delayLocationHandler,f,h=!1,k=!1;window.sc_delayLocationHandler=function(){h=!0;c()};
return function(n){k=!0;f=n;c()}}
function Em(a,b,c,e){e&&e instanceof Function?(window.sc_searchMetricsLinkCallback=function(){e(c)},Fm(a,b,”sc_searchMetricsLinkCallback”)):Fm(a,b,”sc_nullFunction”)}
l.Ip=function(a){var b=Dm(this,”article_help_link_clicked”,hg().visit_id,”help”);bh(b,”url”,a);Fm(this,b,”sc_nullFunction”)};
l.Jp=function(a){var b=Dm(this,”opened_to_article”,hg().visit_id,”help”);bh(b,”shownContentList”,a);Fm(this,b,”sc_nullFunction”)};
function Dm(a,b,c,e,f){a=bh(bh(bh(bh(bh(bh(bh(new Zg(a.ha),”flow”,e||”support-content”),”gfSessionId”,c),”hcName”,hg().hc),”locale”,hg().lang),”authuser”,hg().au),”useAnonymousMetrics”,”false”),”userAction”,b);(f=f||Gm())&&bh(a,”productSpecificContext”,f);”help”===e&&bh(a,”useInappHelpPanel”,”true”);(e=Og(“productEscalationsId”))&&bh(a,”productId”,e);return a}
function Gm(){var a=hg().query_params.find(function(b){return”ec”==b.key});
return a?a.value:””}
function Fm(a,b,c){if(a.o||a.ha)bh(b,”callback”,c),a=mh(“SCRIPT”),a.onerror=window[c],$d(a,wh(b.toString())),document.body.appendChild(a)}
Am.prototype.setUpMojoReportingForSearchResults=Am.prototype.Xp;var Hm;Gb(“hcfe.SearchTracking”,Am);window.sc_initSearchTracking=function(){Hm||(Hm=new Am,Hm.Xp(),Hm.Yp(),window.sc_trackSearchResultImpressions=window.sc_trackSearchResultEnabledRceTracking?window.sc_nullFunction:Hm.Qf.bind(Hm))};function Im(){this.ya=this.ya;}
Im.prototype.ya=!1;Im.prototype.dispose=function(){this.ya||(this.ya=!0,};{if(;;)};function Jm(a,b){this.type=a;;this.defaultPrevented=this.ha=!1}
Jm.prototype.preventDefault=function(){this.defaultPrevented=!0};function Km(a,b){,a?a.type:””);;this.button=this.screenY=this.screenX=this.clientY=this.clientX=0;this.key=””;this.charCode=this.keyCode=0;this.metaKey=this.shiftKey=this.altKey=this.ctrlKey=!1;this.state=null;this.pointerId=0;this.pointerType=””;this.ka=null;a&&this.init(a,b)}
x(Km,Jm);var Lm={2:”touch”,3:”pen”,4:”mouse”};
Km.prototype.init=function(a,b){var c=this.type=a.type,e=a.changedTouches&&a.changedTouches.length?a.changedTouches[0]:null;||a.srcElement;this.o=b;if(b=a.relatedTarget){if(oe){a:{try{ie(b.nodeName);var f=!0;break a}catch(h){}f=!1}f||(b=null)}}else”mouseover”==c?b=a.fromElement:”mouseout”==c&&(b=a.toElement);this.relatedTarget=b;e?(this.clientX=void 0!==e.clientX?e.clientX:e.pageX,this.clientY=void 0!==e.clientY?e.clientY:e.pageY,this.screenX=e.screenX||0,this.screenY=e.screenY||
0):(this.clientX=void 0!==a.clientX?a.clientX:a.pageX,this.clientY=void 0!==a.clientY?a.clientY:a.pageY,this.screenX=a.screenX||0,this.screenY=a.screenY||0);this.button=a.button;this.keyCode=a.keyCode||0;this.key=a.key||””;this.charCode=a.charCode||(“keypress”==c?a.keyCode:0);this.ctrlKey=a.ctrlKey;this.altKey=a.altKey;this.shiftKey=a.shiftKey;this.metaKey=a.metaKey;this.pointerId=a.pointerId||0;this.pointerType=”string”===typeof a.pointerType?a.pointerType:Lm[a.pointerType]||””;this.state=a.state;
Km.prototype.preventDefault=function(){;var a=this.ka;if(a.preventDefault)a.preventDefault();else if(a.returnValue=!1,yh)try{if(a.ctrlKey||112=a.keyCode)a.keyCode=-1}catch(b){}};function Mm(a,b,c,e,f){this.listener=a;this.proxy=null;this.src=b;this.type=c;this.capture=!!e;this.zj=f;this.key=++el;this.Rg=this.Wi=!1}
function Nm(a){a.Rg=!0;a.listener=null;a.proxy=null;a.src=null;a.zj=null}
;function Om(a){this.src=a;this.o={};this.ha=0}
Om.prototype.add=function(a,b,c,e,f){var h=a.toString();a=this.o[h];a||(a=this.o[h]=[],this.ha++);var k=Pm(a,b,e,f);-1c.keyCode||void 0!=c.returnValue)){a:{var f=!1;if(0==c.keyCode)try{c.keyCode=-1;break a}catch(k){f=!0}if(f||void 0==c.returnValue)c.returnValue=!0}c=[];for(f=b.o;f;f=f.parentNode)c.push(f);a=a.type;for(f=c.length-1;!b.ha&&0>>0);function Wm(a){if(“function”===typeof a)return a;a[fn]||(a[fn]=function(b){return a.handleEvent(b)});
return a[fn]}
;function gn(){; Om(this);this.Eb=this;this.Xa=null}
x(gn,Im);gn.prototype[dl]=!0;l=gn.prototype;l.Xk=function(){return this.Xa};
l.dispatchEvent=function(a){var b=this.Xk();if(b){var c=[];for(var e=1;b;b=b.Xk())c.push(b),++e}b=this.Eb;e=a.type||a;if(“string”===typeof a)a=new Jm(a,b);else if(a instanceof Jm)||b;else{var f=a;a=new Jm(e,b);nc(a,f)}f=!0;if(c)for(var h=c.length-1;!a.ha&&0n’),
“logo_googleg_48dp.svg”:uc(‘n n n n n nn’),
“search.svg”:uc(‘n’)};function kn(a){,”sc.shared.TsAssetInterop”);this.o=a}
Na(kn,Vl);kn.prototype.content=function(){Tl(jn[this.o])};function ln(a){a=void 0===a?{}:a;a=void 0===a.size?”mspin-small”:a.size;,”sc.shared.MaterialSpinner”);this.o=a}
Na(ln,Vl);ln.prototype.content=function(){var a=this;this.element(“div”,”class”,”mspin “+this.o,function(){a.element(“div”,function(){a.element(“div”)})})};function mn(a){this.o=a;a.then(Db(function(){},this),function(){},this)}
function nn(a,b,c){return a.o.then(function(e){var f=e[b];if(!f)throw Error(“Method not found: “+b);return f.apply(e,c)})}
function on(a,b,c){for(var e=Array(arguments.length-2),f=2;f=e.x&&(”px”);else if(e.right>=c){var f=Number(“px”,””));”px”}e.bottom>=b&&(*-1+”px”)}};
function Mn(a){a.ha.addEventListener(“mouseenter”,a.ta);a.ha.addEventListener(“mouseleave”,a.Ba);a.ha.addEventListener(“focus”,a.ta);a.ha.addEventListener(“blur”,a.ka);a.o&&a.o.addEventListener(“mouseleave”,a.ka)}
function Ln(a){a.ha.removeEventListener(“mouseenter”,a.ta);a.ha.removeEventListener(“mouseleave”,a.Ba);a.ha.removeEventListener(“focus”,a.ta);a.ha.removeEventListener(“blur”,a.ka);a.o&&a.o.removeEventListener(“mouseleave”,a.ka)}
function Kn(a,b){if(b.scrollWidth>b.offsetWidth)return!0;b=p(b.children);for(var;!c.done;,c.value))return!0;return!1}
;var Nn={ux:{1E3:{other:”0K”},1E4:{other:”00K”},1E5:{other:”000K”},1E6:{other:”0M”},1E7:{other:”00M”},1E8:{other:”000M”},1E9:{other:”0B”},1E10:{other:”00B”},1E11:{other:”000B”},1E12:{other:”0T”},1E13:{other:”00T”},1E14:{other:”000T”}},tx:{1E3:{other:”0 thousand”},1E4:{other:”00 thousand”},1E5:{other:”000 thousand”},1E6:{other:”0 million”},1E7:{other:”00 million”},1E8:{other:”000 million”},1E9:{other:”0 billion”},1E10:{other:”00 billion”},1E11:{other:”000 billion”},1E12:{other:”0 trillion”},1E13:{other:”00 trillion”},
1E14:{other:”000 trillion”}}},On=Nn;On=Nn;var Pn={AED:[2,”dh”,”u062f.u0625.”],ALL:[0,”Lek”,”Lek”],AUD:[2,”$”,”AU$”],BDT:[2,”u09f3″,”Tk”],BGN:[2,”lev”,”lev”],BRL:[2,”R$”,”R$”],CAD:[2,”$”,”C$”],CDF:[2,”FrCD”,”CDF”],CHF:[2,”CHF”,”CHF”],CLP:[0,”$”,”CL$”],CNY:[2,”u00a5″,”RMBu00a5″],COP:[32,”$”,”COL$”],CRC:[0,”u20a1″,”CRu20a1″],CZK:[50,”Ku010d”,”Ku010d”],DKK:[50,”kr.”,”kr.”],DOP:[2,”RD$”,”RD$”],EGP:[2,”u00a3″,”LE”],ETB:[2,”Birr”,”Birr”],EUR:[2,”u20ac”,”u20ac”],GBP:[2,”u00a3″,”GBu00a3″],HKD:[2,”$”,”HK$”],HRK:[2,”kn”,”kn”],HUF:[34,
“RUB”],SAR:[2,”Rial”,”Rial”],SEK:[50,”kr”,”kr”],SGD:[2,”$”,”S$”],THB:[2,”u0e3f”,”THB”],TRY:[2,”u20ba”,”TRY”],TWD:[2,”$”,”NT$”],TZS:[0,”TSh”,”TSh”],UAH:[2,”u0433u0440u043d.”,”UAH”],USD:[2,”$”,”US$”],UYU:[2,”$”,”$U”],VND:[48,”u20ab”,”VNu20ab”],YER:[0,”Rial”,”Rial”],ZAR:[2,”R”,”ZAR”]};var Qn={Nm:”.”,wk:”,”,Rm:”%”,yk:”0″,ar:”+”,Qm:”-“,Pm:”E”,Sm:”u2030″,xk:”u221e”,Yq:”NaN”,Iq:”#,##0.###”,Wx:”#E0″,Sx:”#,##0%”,zx:”u00a4#,##0.00″,Om:”USD”},Rn=Qn;Rn=Qn;function Sn(){this.Ca=40;this.ha=1;this.ka=3;;this.Ia=!1;this.Ea=this.ya=””;;this.Ba=””;this.o=1;!1;this.ta=[];this.Ga=this.Ha=!1;var a=Rn.Iq;a.replace(/ /g,”u00a0″);var b=[0];this.ya=Tn(this,a,b);for(var c=b[0],e=-1,f=0,h=0,k=0,n=-1,t=a.length,u=!0;b[0]e&&n++;break;case “0”:if(0e&&n++;break;case “,”:0f+h||1>this.Fa)throw Error(‘Malformed exponential pattern “‘+a+'”‘);u=!1;break;default:b[0]–,u=!1}0==h&&0e&&0f+h)||0==n)throw Error(‘Malformed pattern “‘+
a+'”‘);k=f+h+k;;this.ha=(!1:this.ya.length=ua)pa+=ua,n=!0;else if(ta==w.charAt(0)){if(h||k)break;pa+=”.”;h=!0}else if(ta==na.charAt(0)&&(“u00a0”!=na.charAt(0)||b[0]+1a||0==a&&0>1/a;e?c.Oo?b.push(c.Oo):(b.push(c.prefix),b.push(,b.push(this.ya));if(isFinite(a))if(a=a*(e?-1:1)*this.o,this.Ga)if(0==a)Xn(this,a,this.ha,b),Yn(this,0,b);else{var f=Math.floor(Math.log(a)/Math.log(10)+2E-15);a=Wn(a,-f);var h=this.ha;1this.ha?(h=f%this.Ca,0>h&&(h=this.Ca+h),a=Wn(a,h),f-=h,h=1):1>this.ha?(f++,a=Wn(a,-1)):(f-=this.ha-1,a=Wn(a,this.ha-
1));Xn(this,a,h,b);Yn(this,f,b)}else Xn(this,a,this.ha,b);else b.push(Rn.xk);e?c.Po?b.push(c.Po):(b.push(c.suffix),b.push(this.Ba)):(b.push(c.suffix),b.push(this.Ea));return b.join(“”)};
function Xn(a,b,c,e){if(>a.ka)throw Error(“Min value must be less than max value”);e||(e=[]);var f=Wn(b,a.ka);f=Math.round(f);isFinite(f)?(b=Math.floor(Wn(f,-a.ka)),f=Math.floor(f-Wn(b,a.ka))):f=0;var h=b;var k=f,n=0c?Zn(u,-1):Zn(u,c)}n=n(u);n=n.replace(“.”,””);n+=fe(“0”,parseInt(k[1],10)-n.length+1)}a.ka+1>n.length&&(n=”1″+fe(“0”,a.ka-n.length)+n);for(a=n.length;”0″==n.charAt(a-1)&&a>f+1;)a–;for(h=1;hb?(b=-b,c.push(Rn.Qm)):a.Ia&&c.push(;b=””+b;for(var e=Rn.yk,f=b.length;fa)return a-48;var b=Rn.yk.charCodeAt(0);return b>>0),y=[[“js_request_id”,na],[“rr”,1],[“lc”,1]],pa=xo();0c||0>a?0:a+b>=c?c-b:a}
function vp(a){switch(a){case 1:case 3:return”100%”;case 2:case 4:return”0%”;default:return”50%”}}
;var zp=/^data:image/png;base64,/;function Ap(a,b,c){var e=this;;this.ha=b;;‘.screenshot__toggle input[type=”checkbox”]’);“.screenshot__actions”);“.screenshot__highlight button”);this.ka=this.ta.querySelector(“.screenshot__blackout button”);this.o.addEventListener(“change”,function(){var f=e.o.checked;!f;e.ka.disabled=!f;f?(e.ha.activate(),Bp(e,0)):e.ha.deactivate()});“click”,function(){Bp(e,0)});
function Bp(a,b){if(a.o.checked)switch(b){case 0:E(,”active”,!0);E(a.ka,”active”,!1);a.ha.setHighlightAnnotation();break;case 1:E(,”active”,!1),E(a.ka,”active”,!0),a.ha.setBlackoutAnnotation()}}
Ap.prototype.getScreenshotData=function(){var a=this;return this.o.checked?(new Promise(function(b,c){a.ha.getScreenshotData().then(function(e){b(e)},function(){c()})})).then(function(b){return Cp(a,b)}):Promise.resolve()};
function Cp(a,b){var c=Dp(b.dataUrl);return c?new Promise(function(e,f){var h=new Ao(c);h.ah(“formId”,;h.Kg(function(){e({,mimeType:c.type,Ad:h.o,})}).onError(function(){f()}).start()}):Promise.reject()}
function Dp(a){if(!a.match(zp))return null;a=new Blob([He(a.substr(22))],{type:”image/png”});var;a.lastModified=b;”screenshot”+b+”.png”;return a}
Ap.prototype.getScreenshotData=Ap.prototype.getScreenshotData;Ap.prototype.deactivate=Ap.prototype.deactivate;Ap.prototype.activate=Ap.prototype.activate;window.sc_initFormScreenshot=function(a,b,c){return new Ap(a,b,c)};function Ep(a,b){;this.ka=b;this.ha=this.o=void 0;Fp(this)}
function Fp(a){window.sc_renderRecaptcha=function(){return Gp(a)};
var b=document.createElement(“script”),c=Bc(uc(“{onload}&render=explicit&hl=%{hl}”),{onload:”sc_renderRecaptcha”,hl:hg().lang});$d(b,c);document.head.appendChild(b)}
function Gp(a){a.ha=grecaptcha.render(,{sitekey:”6LdZHQYTAAAAAFnofYfPjNlXpxWAqTwfLh9d0zL2″,callback:function(){a.o&&a.o()},
size:1===hg().dt?”normal”:”compact”,theme:vg()?”dark”:”light”});a.ka&&a.ka()}{this.o=a;return this};
Ep.prototype.getResponse=function(){return grecaptcha?grecaptcha.getResponse(this.ha):””};
Ep.prototype.reset=Ep.prototype.reset;Ep.prototype.getResponse=Ep.prototype.getResponse;;function Hp(a){this.o=a;this.ha=this.Ba=null;this.ka=[];“input”);this.ya=this.ta=-1;this.Ia=this.Vh.bind(this);this.Ga=this.Sl.bind(this);this.Ja=this.Ca=this.Ea=0;!1;this.Ha=0;this.Fa=new Lh;Ip(this)}
function Ip(a){“div”);;E(,”sc-select”,!0);“tabindex”,0);“role”,”listbox”);“mousedown”,function(e){eg(this.ha,”sc-select-show”)?||this.ha.contains(||this.Vh():0==e.button&&Jp(this)}.bind(a));“keydown”,a.Du.bind(a));a.Ba=document.createElement(“span”);;var b=document.createElementNS(“”,”svg”);b.setAttribute(“viewBox”,”0 0 48 48″);var c=document.createElementNS(“”,”path”);c.setAttribute(“d”,”M14 20l10 10 10-10z”);b.appendChild(c);;a.ha=document.createElement(“ol”);a.ha.addEventListener(“mousemove”,function(){!0}.bind(a));
function Np(a){var b=a.o.getAttribute(“aria-label”)||””;b&&(-1!==a.o.selectedIndex&&(b+=” (“+a.o[a.o.selectedIndex].innerText+”)”),“aria-label”,b))}
function Pp(a){a=p((a||document).getElementsByTagName(“select”));for(var;!b.done;,”true”!==b.dataset.exclude&&new Hp(b)}
window.sc_initSelects=function(){Pp(window.sc_scope)};function Qp(a){Te(this,a,-1,null,null)}
x(Qp,Re);l=Qp.prototype;l.wa=ma(12);function Rp(a,b){var c,e={name:null==(c=z(b,1))?void 0:c,value:null==(c=z(b,2))?void 0:c};a&&(e.Aa=b);return e}
l.getName=function(){return z(this,1)};
l.Ua=function(){return z(this,2)};
l.kb=function(a){return ff(this,2,a)};
l.vb=ma(61);function Sp(a){Te(this,a,-1,null,null)}
x(Sp,Re);Sp.prototype.wa=ma(11);function Tp(a,b){var c={seconds:cf(b,1,0),nanos:cf(b,2,0)};a&&(c.Aa=b);return c}
;function Up(a,b){this.o={};this.ha=[];;var c=arguments.length;if(12*this.ka&&Vp(this),!0):!1};
function Vp(a){if(a.ka!=a.ha.length){for(var b=0,c=0;b
=e.ha.length)throw mi;var h=e.ha[b++];return a?h:e.o[h]};
return f};
function Wp(a,b){return,b)}
;var Xp=/^(?:([^:/?#.]+):)?(?://(?:([^/?#]*)@)?([^/?#]*?)(?::([0-9]+))?(?=[/?#]|$))?([^?#]+)?(?:?([^#]*))?(?:#([sS]*))?$/;function Yp(a){a=a.match(Xp)[1]||null;!a&&ob.self&&ob.self.location&&(a=ob.self.location.protocol,a=a.substr(0,a.length-1));return a?a.toLowerCase():””}
;function Zp(a){Te(this,a,-1,null,null)}
x(Zp,Re);Zp.prototype.wa=ma(9);function $p(a){Te(this,a,-1,null,null)}
x($p,Re);$p.prototype.wa=ma(8);function aq(a){Te(this,a,-1,bq,null)}
x(aq,Re);var bq=[1];aq.prototype.wa=ma(7);function cq(a){Te(this,a,-1,null,null)}
x(cq,Re);cq.prototype.wa=ma(6);function dq(a){Te(this,a,-1,eq,null)}
x(dq,Re);var eq=[1];dq.prototype.wa=ma(5);function fq(a,b){var c=null;return function(e){for(var f=[],h=0;hb.length){f=[{state:5}];a.Ea.set(“”,f);t.Za(4);break}a.o.ka=!0;a.Ka();{Ib:!0});Ua(t,5);return Ra(t,a.Cb(b.trim()),7);case 7:f=t.ha;0===f.length&&(f=[{state:4}]);a.o.ka=!1;Va(t,4);break;case 5:h=Wa(t),f=[{state:3}],
a.o.ka=!1,a.Ka(),{Ib:!0}),Pq(h);case 4:return a.Ea.set(“”,f),k=a.o,,Ra(t,Dq(a,!0),8);case,t.ha,a.ka),a.o.Ka(),{Ib:!0}),Ta(t)}})}
function Jq(a,b){return function(){a.Ga=b;a.o.close();}}
function Qq(a){return””!==a.ta?a.ta.replace(wq,””):null===a.Ga?””:a.Ga.jc.replace(wq,””)}
xq.prototype.ub=function(){for(var a=[],b=p(this.ha.keys()),;!c.done;{(c=c.value)&&!a.includes(c)&&a.push(c);c=p(this.ha.get(c));for(var;!e.done;!a.includes(e)&&a.push(e)}return a};
function Fq(a,b){var c,e;return fb(function(f){if(1==f.o)return Ua(f,2),Ra(f,a.Wa(b),4);if(2!=f.o){c=f.ha;if(!c||0==c.length)return Rq(a,b,Error(“No results”)),f.return();a.ka+=c.length;a.ha.set(b,c);return Va(f,0)}e=Wa(f);a.ka++;Rq(a,b,e);Ta(f)})}
function Rq(a,b,c){a.ha.set(b,[{state:2}]);a.Ja&&a.Ba&&(a.Ba=!1,a.Ja(c),Aq(a));Pq(c)}
function Aq(a){a.ya=new Gn({label:”Google Ads Customer ID”,Tc:!0,je:function(){a.ta=a.ya.Ta().replace(wq,””);a.yb()}})}
function Pq(a){a=new CustomEvent(“cid_selector_fetch_error”,{detail:a});Nl().dispatchEvent(a)}
function yq(a){a.Ea.clear();a.Ea.set(“”,[Eq()])}
function Eq(){return{value:””,trigger:function(){},
;function Sq(a){this.o=a}
;function Tq(a){this.o=a}
Na(Tq,Sq);Tq.prototype.Na=function(){return this.o.xa};function Uq(a){this.o=a}
Na(Uq,Sq);l=Uq.prototype;l.listen=function(a,b,c,e){var f=this;return,function(h){return||ob,new Tq(h,f))},c)};
l.ll=function(){throw Error(“Not implemented.”);};
l.$n=function(){throw Error(“Not implemented.”);};
l.Jm=function(){throw Error(“Not implemented.”);};
l.dispatchEvent=function(){throw Error(“Not implemented.”);};
l.Gp=function(){throw Error(“Not implemented.”);};
l.Xk=function(){throw Error(“Not implemented.”);};
l.Hh=function(){throw Error(“Not implemented.”);};
Uq.prototype[dl]=!0;function Vq(a){Te(this,a,-1,null,null)}
x(Vq,Re);Vq.prototype.wa=ma(4);Vq.prototype.Lb=ma(49);function Wq(a){Te(this,a,-1,null,null)}
x(Wq,Re);Wq.prototype.wa=ma(3);function Xq(a){this.Da=a;this.ka=””;this.o=[]}
Xq.prototype.init=function(){Yq(this);Zq(this);!this.Da.visit_id&&window.sc_visit_id&&(this.Da.visit_id=window.sc_visit_id);if(!$q){var a=document.getElementsByTagName(“body”)[0],;a.addEventListener(“click”,b);$q=!0;document.addEventListener(“pjaxunload”,function(){a.removeEventListener(“click”,b);$q=!1})}Jh=new Hh({mi:this.Da.scone_url,
Xq.prototype.ha=function(a){for(var b=0;b
a&&(a=5);for(var b=(.95-.05)/(a-1),c=[.05];c.length=b&&0e){if(a.Ca){b=a.o;!1!==b.o&&(b.o=!1,b.Ka());a.ka.close();return}c=Math.abs(Math.round(f-b))c-k&&k>h||nh&&(e=rs(a.Pb,k,a.Wg),e.size))break;if(n


Clear search

Close search

Google apps

Main menu

This article is for administrators. To manage your own groups, visit the Google Groups help.

The new Groups release has a fresh look, including controls that match Gmail and other Google services. For the next few months, however, some advanced features will only be available in the previous version, which is referred to as classic Groups.

Classic Groups

New Google Groups home page
New Groups

Open all|Close all

What you need to know about new Groups


New Groups includes most popular Groups features as well as:

  • Improved navigation—Group settings are consolidated into one section for easy access.
  • Streamlined group creation—A three-step wizard simplifies group creation.
  • Powerful search options—New filtering and search options help you find content.
  • Simplified My groups page—When you’re signed in to Google Groups (, you can find all your groups on the same page. If you’re signed in to an account managed by your work or school, the groups and features available depend on the settings for your organization.
  • Standardized messaging—Topics are now called conversations and match Gmail patterns.
  • Enhanced member management—The updated Members page provides quick access to group member subscriptions and permissions.
Release schedule

New Groups is rolling out in stages. In the GA opt-out stage, some features will be available only in classic Groups. To use these features, you can switch between classic and new Groups as needed until the GA mandatory release of new Groups. Learn how to switch between new and classic Groups.

This article will be updated with dates for each release stage as they become available. For the latest information, follow the G Suite Updates blog.

Stage Date available Description
GA Opt-out for G Suite users June 9, 2020 G Suite customers will automatically get the new Groups experience when they log in to However, they can opt out of new Groups and continue to use classic Groups as needed. Learn how to revisit classic Groups.
End of period where admins can turn off access to new Groups September 15, 2020 All users will have the option to use new Groups and will see the new UI by default. The Admin console setting to turn off new Groups access will no longer be available.
GA Mandatory To be announced in the G Suite Updates blog at least 1 month before release All users will be migrated to new Groups at this stage. Classic Groups will no longer be available.
Features coming soon to new Groups

On an ongoing basis, many features from classic Groups are being made available in new Groups. Check back frequently to see which features have been moved to new Groups.

Features now available in new Groups

The following features are now available in both new Groups and classic Groups:

Feature Description
Mobile readiness The Groups UI refined for use on mobile devices. See Using new Groups on mobile.
Collaborative Inboxes

Creating Collaborative Inboxes, using Collaborative Inbox features such as assigning topics, and changing a group’s type to Collaborative Inbox.

Collaborative Inboxes you’ve created in classic Groups are accessible in new Groups.

Labels Replacement for tags and categories.
Multiple domains: Group creation

Creating groups in multiple domains.

To use this feature, you must be signed in to a work or school account. The options you see might be different. To learn more, contact your administrator.

Favorite conversations Viewing all of your favorite conversations (topics) on a single page.
Show original message source Viewing the source code of a message, including its headers.

Features currently unavailable in new Groups

The following features aren’t yet available in new Groups. If you need these features, use classic Groups:

Feature Limitation
Welcome messages Adding or changing the group welcome message that appears above group conversations.
Global settings Viewing or changing preferences and settings that apply to all of your groups.
Custom group roles Creating and managing custom roles.
How to go back to classic Groups any time

If you’re using new Groups, you can go back to classic Groups any time. When you go back to classic Groups, please complete the survey to provide feedback on new Groups.

  1. Sign in to Google Groups.
  2. In the top right, click Settings "".
  3. Click Return to classic Google Groups.

Using new Groups on mobile

You can use new Groups on your mobile device to search for and view groups, conversations, and your membership settings.

To perform tasks such as creating a group or posting to a conversation, use the full desktop version of Groups. Many popular browsers let you view the desktop version of a site on a mobile device. For example,  in Google Chrome, in the top right, click More ""and thenselect Desktop site.

What’s changing in new Groups

How you create groups

In new Groups, you can quickly create groups and invite members at the same time. 

To streamline the process, the Group’s primary language setting has been moved out of group creation. In new Groups, this setting is now called Group email language. You can configure it under Group settings > Email options.

Learn how to create groups in new Groups.

How you manage members

Location in classic Groups: Left panel > Members

Location in new Groups: Left panel > People 

To… Using classic Groups Using new Groups
View current/
pending members
  • All members
  • Outstanding invites
  • Join requests
  • Members
  • Pending Members
Add members
  • Invite members
  • Direct add members

Membersand thenAdd members

 Learn how to manage members in new Groups.

How you view certain members and messages

In new Groups, the way you view members whose messages are bouncing, as well as the moderated message list, is different from classic Groups.

To view… Using classic Groups Using new Groups
Members whose messages are bouncing On the left nav, click Members. The word Bouncing appears in the Delivery column of members whose messages are bouncing. On the left nav, click Members. A red triangle appears next to the Subscription column entry of members whose messages are bouncing.
Moderated messages On the left nav, click Messages > Pending Messages. You can see all messages waiting for moderation. On the left nav, click Conversations > Pending. You can view the five most recent messages waiting for moderation. To see more messages, at the top right, click Next "".
Permissions and settings

In new Groups, to view a group’s settings, click Group settings at the bottom of the left navigation panel. To show all available settings, at the top right of the Group settings page, next to Advanced, click Turn on "".

To learn more about new Group settings, see View or edit group details.

Email options

Location in classic Groups: Settings > Email options

Location in new Groups: Group settings > Email options

Classic setting New Groups setting
Subject prefix Subject prefix
Email footer Email footer
Post replies to Post replies to

Identity settings

Location in classic Groups: Settings > Identity

Location in new Groups: Group settings > Member privacy

Classic setting New Groups setting

Required forms of identity

Identification required
for new members
Display names and email addresses Display names must be unique

Basic permissions

Location in classic Groups: Permissions > Basic permissions

Location in new Groups: Group settings > General

Classic setting New Groups setting
Group visibility Who can see group
View topics Who can view conversations
Join the group Who can join group
Allow members external to this organization Allow external members

Posting permissions

Location in classic Groups: Permissions > Posting permissions

Location in new Groups: Group settings > Posting policies

Classic setting New Groups setting
Moderate metadata Who can moderate metadata
Attach Files

Who can attach files

Post Allow Email Posting
Post As The Group Who can post as group
Reply To Author

Who can reply privately to authors

Moderation permissions

Location in classic Groups: Permissions > Moderation permissions

Locations in new Groups:

  • Group settings > Posting policies
  • Group settings > Member moderation
Classic setting New Groups setting
Manage members Who can manage members
(under Member moderation)
Moderate content Who can moderate metadata
(under Posting policies)

Access permissions

Location in classic Groups: Permissions > Access permissions

Locations in new Groups:

  • Group settings > General
  • Group settings > Member privacy
Classic setting New Groups setting

Contact the owners
and the managers
of this Group

Who can contact group owners
(under Member privacy)
View Members Who can view members
(under General)
View Email Addresses Who can view member email addresses
(under Member privacy)
View Topics

Who can view conversations
(under General)

Information settings

Location in classic Groups: Settings > Information

Locations in new Groups:

  • Group settings > General
  • Group settings > Posting policies
  • Group settings > Email options
  • Group settings > Delete group
Classic setting New Groups setting
  • Group name
  • Group email address
  • Group description

(under General information)

  • Group name
  • Group email
  • Group description

(under General)

Group’s primary language
(under General information)
Group email language
(under Email options)
  • Allow posting by email
  • Allow users to post to
    the group on the web

(under General information)

  • Allow Email Posting
  • Allow web posting

(under Posting policies)

Group visibility
(under Group visibility)
Who can see group
(under General)
Archive options
(under Content control)
Conversation history
(under Posting policies)
Conversation mode
(under Web view customization)
Conversation mode
(under Email options)
Delete group
(under Advanced)
Delete group
(under Delete group)
New terminology

Topics are now called conversations to match how messages are described in Gmail.

Features planned for deprecation

To simplify Google Groups, the following features are planned for deprecation in new Groups.

Feature Description
Canned responses

Creating one or more canned responses to use in your posts.

Instead, you can create templates in Gmail.

Pinning topics Making topics appear at the top of the list.
Moving topics Moving topics from one group to another.
Tags and categories Using tags and categories to manage content. The functionality will be replaced by labels.
Group types Creating web and Q&A forums and using forum-related features such as marking the best answer in existing groups.
Topic types Creating and managing discussion and question type topics.
Statistical info on the About Group page Usage graphs and other statistical information about a group.
Embedding groups in web pages

Using iFrames to embed groups in external web pages. Located in classic Groups under Manage groupand thenInformationand thenGeneral information.

Instead, you can link to a group from an external web page and view the group in Groups.

Some advanced keyboard shortcuts Using key combinations to perform tasks, such as pressing g + c on the My groups page to create a group. Accessibility shortcuts will continue to be supported, however.
Saved searches Saving a search so you can use it again simply by clicking the search name in the left panel.
Editing own posts Allowing users to make changes to their messages after posting them.
Themes Choosing a background theme for your Groups display.
Unread messages

Viewing unread message counts for starred groups in the left navigation panel.

Instead, you can create a filter for your group messages in Gmail and view unread message counts there.

User activity Viewing activity for a user such as recent posts, total posts, posting trend per month, and group memberships.
My Discussions

Viewing the My Discussions page from the left navigation panel. 

Instead, you can use search to view specific groups and messages.

Posting history Viewing a record of a group member’s posting activity.

Review feature availability & provide feedback

As an administrator, you don’t need to take any action to enable the new Groups experience. It will automatically be available to everyone in your organization according to the release schedule.

Because some features are not yet available in new Groups, you might want to:

  • Identify any features you need that are only available in classic Groups
  • Tell users in your organization about the changes
  • Provide feedback on new Groups using the in-product links

Was this helpful?

How can we improve it?

A Faster CPython

GitHub – markshannon/faster-cpython: How to make CPython faster.

{{ message }}

How to make CPython faster.



Failed to load latest commit information.



Latest commit message

Commit time

Oct 20, 2020

Oct 20, 2020

Oct 20, 2020

Oct 20, 2020

Five times faster

We want to speed up CPython by a factor of 5 over the next four releases.

See the plan for how this can be done.

Paying for it

Making CPython faster by this amount will require funding. Relying on the goodwill and spare time of the core developers is not sufficient.

See funding for my thoughts on how the money can be found.


How to make CPython faster.


No releases published

No packages published

You can’t perform that action at this time.

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.

Show HN: Free to attend online public lectures

Wellcome Collection: Booking a ticket guarantees you entry to the online event. You will be given joining instructions in your confirmation email. If you have any access requests or requirements, for example a transcript of the event, email us at or call 020 7611 2222.

Sexual Diseases and Medicine in Early Modern South Asia

A tailor made computer mouse

After the artsy bit comes the practical stuff: where do the screws and circuit boards go?

3D modelling is generally done using 2 different types of tools, simply put: surface modelling (for sculpting/artists) and solid modelling (for engineers).

Here I switched from surface to solid modelling, so that I could use the model in mechanical CAD software. This CAD software makes it easier to work with real world dimensions and to add circuit boards, screw holes, switches and all that stuff in the right places.

For the insides (electronics) I wanted to use an existing Logitech MX Master S3. The design of this mass produced mouse is perfect, except: it’s one size fits none. So let’s fix that!

Show HN: Live chat with GPT-3-powered conversational hints

The vision behind Activechat is to make the most advanced AI technology easily available for customer care applications even if your team has zero technical background. This vision empowers our natural-language integrations, sentiment detection, and other advanced features packed into our visual chatbot builder. But there’s more to it, and we’re happy to introduce our recent integration with OpenAI’s beta of their GPT-3 model – GPT-3 for live chat.

GPT-3 is a mega machine learning model, created by OpenAI, and it can write it’s own op-eds, poems, articles, and even working code. As a result of its humongous size (over 175 billion parameters), GPT-3 can do what no other model can do (well): perform specific tasks without any special tuning. You can ask GPT-3 to be a translator, a programmer, a poet, or a famous author, and it can do it with its user (you) providing fewer than 10 training examples. Damn.

Dale Markowitz

Activechat has partnered with OpenAI team to build something that looks like real magic. Once you describe the context of your business in a plain natural language and provide a couple of example questions and answers that your human live chat agents may encounter in their day-to-day conversations with customers, we can use the power of GPT-3 to provide instant hints to your agents to help them answer almost any question that a customer may have.

Let’s look at some real-life examples of this amazing tech.

Bike shop – default settings

Imagine that you’re the owner of a bike shop selling hundreds of bikes from various manufacturers. Your website has a lot of traffic and you introduce live chat to help your customers make their choice and grow your revenue. After a week of accepting incoming chat requests, you suddenly realize that training your agents so that they can really answer this crazy amount of questions from customers-to-be takes tons of time and is quite costly. You have your knowledge base, but most of your agents feel lost when it comes to answering specific questions, and looking for the correct answer often takes quite a lot of time.

Luckily enough, your live chat solution is powered by Activechat, so you can go to “Settings – Integrations – OpenAI” and describe your business case in plain natural language:

This is a conversation between a website visitor and a smart virtual assistant. The conversations are happening across various pages of the website that is selling bicycles, and virtual assistant can answer all kinds of questions about various bike brands and models and help choose the right one according to description made by the visitor.

That’s all you need to seed the OpenAI’s GPT-3 for live chat

Next, you provide answers to three questions that your customers ask most often:

Q: What’s the difference between a carbon and regular bike?
A: The primary difference between carbon and aluminum comes down to weight and ride quality. Carbon frames are usually a bit lighter than aluminum — up to a pound for mountain frames and up to a half-pound on road frames.

Q: How much does a good bike cost?
A: Road bikes range between $350 and $700, Mountain bikes around $1000, Single-speed bike – $400, Beach cruiser $200-300, Recumbent bike $1000-2000, and Kids’ bike (3-8 yrs) will be $140-200.

Q: How do I service my bike?
A: You should regularly service your bike to ensure it is running efficiently and that there are no worn or damaged components. The more you ride the bike the more frequent you should be servicing it, especially after riding in dirt, sand, mud and in the rain.

Guess what? Your training is complete!

Now your agents can pull the “Show AI hints” tab in their live chat interface, and on every new message from a website visitor, there will be 2-3 ready-made answers suggested by the GPT-3 engine.

GPT-3 for live chat provides instant answer suggestions

Clicking any of these hints will copy the answer to the message window, and your agents can send it immediately or edit it, adding specific links to your product pages or other resources. Based on our research, this can reduce the time needed to find and type the answer by 70-80%!

If you’re not satisfied with what you see, just hit the “Refresh” icon and a new set of hints will appear. These hints are powered by all knowledge that the Internet has (GPT-3 model is trained on Common Crawl data, Wikipedia, and multiple other data sources, including a huge amount of books). This makes suggested answers sound human-like and in most cases, they will be relevant, useful, and valuable to your customers.

AI-powered live chat for mobile phones outlet

Another use case from one of our customers – an online shop selling mobile phones. Again, the problem is quite similar to the bike shop above – customers repeatedly ask questions that require a solid chunk of knowledge from customer service agents. Novice agents keep forwarding these questions to more experienced team members, and instead of taking care of really complex queries, these team members keep wasting their time responding to the same questions again and again.

After they introduced GPT-3 for live chat, their seeding settings would look like this:

GPT-3 settings for mobile phones retailer

And here is an example conversation that was made completely by sending GPT-3 answer suggestions, with zero time required from the human agent:

GPT-3-powered live chat conversation

How to use GPT-3 for live chat?

Currently, OpenAI’s GPT-3 is in a public beta. Activechat partnered with OpenAI team to include these amazing features into our live chat platform, and they are available for all our users on Team and Company plans. Here’s how to jump-start your AI-enabled live chat:

  1. Go to “Settings – Integrations – OpenAI” in any of your bots and type your business description in plain natural language.
  2. Add three questions that are most relevant to conversations happening on your website.
  3. Ask your live chat agents to pull the “Show AI hints” tab below the message editing window.

Accessing OpenAI’s GPT-3 settings in Activechat

Yep, it’s that simple! We can’t wait to hear about your use cases, so please feel free to share your stories of GPT-3 making life of your human live chat agents easier.